2012-04-15 3 views
0

Я пытаюсь создать небольшой скрипт Bash для удаления дефисов из имени файла. Например, я хочу переименовать:Удалить дефис из имени файла с Bash

CropDamageVO041412.mpg

в

CropDamageVO041412.mpg

Я новичок в Bash, так нежна:] Спасибо за любую помощь

ответ

3
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 
+0

У этого есть преимущество общей совместимости Posix-shell. Я никогда не сомневаюсь, что я должен пить * все * из баху kool-помощи. – DigitalRoss

+0

Действительно, так я привык избегать фантастических бас -измов, насколько я не использую их даже сейчас, когда редко использую антикварные снаряды. Solaris и AIX могут многое ответить ... – jimw

+0

Вау, это был быстрый ответ. Я должен был указать, что пытался удалить дефисы в многочисленных файлах в формате: [NAME] VO- [DATE] .mpg – idoperceive

6

Попробуйте это:

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 

Это имеет тот недостаток, что приходится работать в любой каталог, который содержит файлы, которые вы хотите изменить, но, как я уже сказал, это немного больше, надежный.

+0

+1 для синтаксиса $ {//}, о котором я никогда не помню :-) – jimw

+1

Если в имени файла могут быть пробелы, вам нужно дважды указать $ file (т. Е. 'Mv" $ file "" $ {file// - /} "') –

+0

@GordonDavisson Хороший улов. Обновлен мой ответ. –

Смежные вопросы