Я пытаюсь создать небольшой скрипт Bash для удаления дефисов из имени файла. Например, я хочу переименовать:Удалить дефис из имени файла с Bash
CropDamageVO041412.mpg
в
CropDamageVO041412.mpg
Я новичок в Bash, так нежна:] Спасибо за любую помощь
Я пытаюсь создать небольшой скрипт Bash для удаления дефисов из имени файла. Например, я хочу переименовать:Удалить дефис из имени файла с Bash
CropDamageVO041412.mpg
в
CropDamageVO041412.mpg
Я новичок в Bash, так нежна:] Спасибо за любую помощь
FN=CropDamageVO-041412.mpg
mv $FN `echo $FN | sed -e 's/-//g'`
Возврат (``) сообщает bash, чтобы запустить команду внутри них и использовать вывод этой команды в выражении. Часть sed применяет регулярное выражение для удаления дефисов из имени файла.
Или сделать это для всех файлов в текущем каталоге, соответствующих определенному шаблону:
for i in *VO-*.mpg
do
mv $i `echo $i | sed -e 's/-//g'`
done
f=CropDamageVO-041412.mpg
echo ${f/-/}
или, конечно же,
mv $f ${f/-/}
Попробуйте это:
for file in $(find dirWithDashedFiles -type f -iname '*-*'); do
mv $file ${file//-/}
done
Предполагается, что ваши каталоги не имеют тире в названии. Это нарушит это.
Синтаксис ${varname//regex/replacementText}
пояснен here. Просто найдите замену подстроки.
Кроме того, это может сломаться, если ваши каталоги или имена файлов имеют в них пробелы. Если у вас есть пробелы в ваших именах файлов, вы должны использовать это:
for file in *-*; do
mv $file "${file//-/}"
done
Это имеет тот недостаток, что приходится работать в любой каталог, который содержит файлы, которые вы хотите изменить, но, как я уже сказал, это немного больше, надежный.
+1 для синтаксиса $ {//}, о котором я никогда не помню :-) – jimw
Если в имени файла могут быть пробелы, вам нужно дважды указать $ file (т. Е. 'Mv" $ file "" $ {file// - /} "') –
@GordonDavisson Хороший улов. Обновлен мой ответ. –
У этого есть преимущество общей совместимости Posix-shell. Я никогда не сомневаюсь, что я должен пить * все * из баху kool-помощи. – DigitalRoss
Действительно, так я привык избегать фантастических бас -измов, насколько я не использую их даже сейчас, когда редко использую антикварные снаряды. Solaris и AIX могут многое ответить ... – jimw
Вау, это был быстрый ответ. Я должен был указать, что пытался удалить дефисы в многочисленных файлах в формате: [NAME] VO- [DATE] .mpg – idoperceive