2013-03-12 7 views
1

У меня есть каталог, содержащий несколько файлов. Каждый файл может иметь другой префикс и суффикс, но все они содержат шестизначное число. Я хочу переименовать файлы, чтобы одна из цифр была изменена (в частности, вторая).Пакетное переименование файлов для изменения цифры

Так, например

*?2????* -> *?5????* 

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

например.

*?2????*?2????* -> *?5????*?5????* 

Любые указатели?

+0

Существует множество других вопросов, обсуждающих команду «переименовать», и требования здесь слишком далеки, чтобы разрешить любой общеприменимый ответ более конкретным, чем «цикл над файлами и переименование файлов с соответствующими именами файлов». – chepner

ответ

0

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

for file in *?2????*; do 
    if [[ $file =~ [0-9]{6} ]]; then 
     echo mv "$file" "$(sed 's/2/5/g' <<< "$file")" 
    else 
     echo mv "$file" "$(sed 's/[0-9]/5/2' <<< "$file")" 
    fi 
done 

Команда sed заменит 2-ое появление цифр на 5.

Если это соответствует вашим потребностям, просто удаляет echo команды из моего фрагмента кода.

+0

Я думаю, что OP сказал, что в случае двух 6-значных строк обе строки нуждаются в обновлении (и в соответствии с его примером, по-разному). – Floris

+0

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

+0

См. Мой отредактированный POST –

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