2010-03-10 6 views
4

Я хотел бы переименовать нумерацию файлов: у меня есть файлы с '???' Мне нужно поставить их в '????'.Переименовать несколько файлов в BASH

myfile_100_asd_4 to myfile_0100_asd_4 

Thanks Arman.

Не так элегантное решение:

#/bin/bash 
snap=`ls -t *_???` 
c=26 
for k in $snap 
do 

    end=${k} 
    echo mv $k ${k%_*}_0${k##*_}_asd_4 
    ((c=c-1)) 

done 

Это работает для меня, потому что у меня есть myfile_100 файлы.

ответ

5

просто использовать оболочку,

for file in myfile* 
do 
    t=${file#*_} 
    f=${file%%_*} 
    number=$(printf "%04d" ${t%%_*}) 
    newfile="${f}_${number}_${t#*_}" 
    echo mv "$file" "$newfile" 
done 
1

Существует приложение UNIX под названием ren (manpage), которое поддерживает переименование нескольких файлов с использованием шаблонов поиска и замещения. Вы должны иметь возможность собирать вместе шаблон, который будет вводить лишнее значение 0 в имя файла.

Редактировать: Страница проекта w/ссылка для скачивания находится по адресу Freshmeat.

+0

На моем дистрибутиве (Mandriva) У меня есть только : mren (1) Наименование mren - переименовать существующий файл MSDOS no ren. – Arman

+0

Я заметил, что некоторые дистрибутивы, похоже, не поставляют с собой, поэтому я предоставил ссылку на страницу Freshmeat со ссылкой на исходную загрузку. – slyfox

8

Использование rename, небольшой скрипт, который поставляется с Perl:

rename 's/(\d{3})/0$1/g' myfile_* 

Если вы передаёте параметр -n перед выражением он только печатает, что переименовывает это было бы сделано, никаких действий не предпринимается. Таким образом, вы можете проверить это работает нормально, прежде чем переименовывать файлы:

rename -n 's/(\d{3})/0$1/g' myfile_* 
+1

Хм, жаль, что я не могу отметить это как другое решение :) – Arman

0

Try:

for file in `ls my*` 
do 
a=`echo $file | cut -d_ -f1` 
b=`echo $file | cut -d_ -f2` 
c=`echo $file | cut -d_ -f3,4` 

new=${a}_0${b}_${c} 
mv $file $new 
done 
+0

использовать расширение оболочки вместо 'ls'. и оболочка имеет возможности обработки строк, поэтому внешние команды действительно не нужны. – ghostdog74

+0

ghostdog74: не могли бы вы объяснить больше? – Arman

+0

Вау, я никогда не использовал «разрез», это так полезно :) – Arman

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