3

У меня есть куча пронумерованных файлов:

file #01.ext
file #02.ext
file #03.ext
file #04.ext
file #05.ext

И я хочу, чтобы все они имели три цифры (две ведущих нуля) вместо одной, поэтому;

file #001.ext
file #002.ext
file #003.ext
file #004.ext
file #005.ext

Моя мысль состоит в том, чтобы использовать sed для замены # на # 0 (что в моем случае достаточно хорошо, пока нет файлов выше # 99). Все файлы находятся в одной папке, как мне это сделать?

4 ответа4

2

Чтобы защитить файлы с 3 цифрами уже

for f in "file #"*.ext; do
  num=${f#file #}
  num=${num%.ext}
  new=$(printf "file #%03d.ext" $num)
  echo mv "$f" "$new"
done

Это отобразит в консоли команды для выполнения, но не переименует файлы.

Если вы довольны тем, что он собирается сделать, вы можете переименовать файлы, убрав слово echo и повторно запустив его.

2

Вам не нужно sed для этого. Это можно сделать с помощью очень простой команды:

rename 's/#0/#00/' *.ext

Пример:

temp$ ls
file #01.ext  file #02.ext  file #03.ext  file #04.ext  file #05.ext
temp$ rename 's/#0/#00/' *.ext
temp$ ls
file #001.ext  file #002.ext  file #003.ext  file #004.ext  file #005.ext
1

Это делает трюк из папки:

ls | sed 's/\(.*\)#\(.*\)/mv "&" "\1#0\2"/' | sh
0

Это гибридное решение:

ls | sed -r "s/(.*#)([0-9]+)([^0-9]*)/printf 'mv -v \"&\" \"%s%03d%s\"' \"\1\" \"\2\" \"\3\"/e;e"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .