2013-05-22 4 views
1

У меня есть файлы в ниже форматеПереименование нескольких файлов в Unix

EnvName.Fullbkp.schema_10022012_0630_Part1.expd 
EnvName.Fullbkp.schema_10022012_0630_Part2.expd 
EnvName.Fullbkp.schema_10022012_0630_Part3.expd 
EnvName.Fullbkp.schema_10022012_0630_Part4.expd 

Я хочу переименовать это с ниже файлов

EnvName.Fullbkp.schema_22052013_1000_Part1.expd 
EnvName.Fullbkp.schema_22052013_1000_Part2.expd 
EnvName.Fullbkp.schema_22052013_1000_Part3.expd 
EnvName.Fullbkp.schema_22052013_1000_Part4.expd 

Это означает, что я просто хочу, чтобы переименовать 10022012_0630 с 22052013_1000 что бы быть командами и петлями, которые будут использоваться для переименования всех файлов в одиночном порядке

+1

возможный дубликат [переименование нескольких файлов в Unix] (http://stackoverflow.com/questions/1086502/rename-multiple -files-in-unix) – Kevin

+1

['mmv - перемещение/копирование/добавление/ссылка нескольких файлов по шаблонам подстановок') (http://manpages.ubuntu.com/manpages/precise/man1/mmv.1.html) –

ответ

1

Это может работать:

rename 's/10022012_0630/22052013_1000/' EnvName.Fullbkp.schema_10022012_0630_Part* 

Приведенные файлы с рисунком EnvName.Fullbkp.schema_10022012_0630_Part*, он изменяет 10022012_0630 на 22052013_1000.

+0

+1 - Allways хорошая идея заменить bash-fu встроенным –

+0

Спасибо! Может быть, это очевидно, но в чем смысл «баш-фу»? – fedorqui

+0

Kung-Fu, но с bash. См. Также google-fu (полезно найти вещи в google) и т. Д. Возможно, это местный жаргон в Европе, не знаю. –

1
for OLDNAME in EnvName.Fullbkp.schema_10022012_0630_Part*.expd; do 
    NEWNAME=`echo "$OLDNAME" | sed 's/10022012_0630/22052013_1000/'` 
    mv "$OLDNAME" "$NEWNAME" 
done 
+0

Вы даже можете сделать 'NEWNAME = $ {OLDNAME/10022012_0630/22052013_1000}'. Основываясь на [String Operations] (http://tldp.org/LDP/abs/html/refcards.html#AEN22664) – fedorqui

+0

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

+0

Привет, Спасибо за помощь. Он отлично работал :) – Shriraj

1

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

for F in $(find /your/path/ -type f -name '*10022012_0630*'); do 
    mv $F ${F/10022012_0630/22052013_1000}; 
done 
Смежные вопросы