2014-03-12 3 views
0

У меня есть каталог, как: /data/work/files/Как изменить имена файлов в Баш

calldata_phonecalls_2131201401_01.zip calldata_phonecalls_7373201401_02.zip

В этом каталоге я хочу, чтобы создать новые файлы, соответствующие zipfiles как, но изменяющие небольшую часть имени в BASH:

calldata_calllog_2131201401_01.tsv calldata_calllog_7373201401_02.tsv

пл Нота "телефонные переговоры" изменено на "calllog"

Помощь Pl.

ответ

4

Используя Shell Parameter Expansion и basename:

for f in /data/work/files/*.zip; do 
    mv "$f" "$(basename "${f/phonecalls/calllog}" .zip).tsv" 
done 

Используя rename (часть Perl распределения):

rename 's/phonecalls/calllog/;s/\.zip$/.tsv/' /data/work/files/*.zip 
+0

уведомления. –

+0

@HomayounAfshari Не заметил этого; должны быть исправлены. – devnull

+0

это пропускает модификацию в названии .. – user1189851

1

Использование переименования:

Используя один вариант переименования:

rename 's/^fgh/jkl/' fgh* 

Использование другой версии переименования:

rename fgh jkl fgh* 

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

Использование мв:

find ./ -name "*.xyz\[*\]" | while read line 
do 
mv "$line" ${line%.*}.xyz 
done 

Другой способ

ls -1 | nawk '/foo-bar-/{old=$0;gsub(/-\(.*\)/,"",$0);system("mv \""old"\" "$0)}' 

Еще одно:

for f in fgh*; do mv $f $(echo $f | sed 's/^fgh/jkl/g'); done 

Есть несколько других ответов под StackOverflow и суперпользователя страниц:

Скопировано/суммируется из следующих ссылок: расширение файла

Rename multiple files in Unix

How to use mv command to rename multiple files in unix?

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