Используя sed , я могу искать и заменять текст в файле. Есть ли способ сделать поиск и замену имен файлов? Например, если у меня есть куча файлов в папке с такими именами:

  • foo01
  • foo02
  • bar001
  • bar002

Я хотел бы быстро переименовать все, начиная с foo, чтобы они имели 3 цифры вместо 2.

4 ответа4

2
#!/bin/bash
shopt -s nullglob
for file in foo*
do
  filename=${file%%[0-9]*}
  num=${file##*[^0-9]}
  newnum=$(printf "%03d" $num)
  newfile=${filename}${newnum}
  mv "$file" "$newfile"
done
1

Существует сценарий Perl, который уже может быть в вашей системе и называется rename или prename .

rename 's/\d\d$/0$&/' foo*

Если вы выполните это несколько раз, он продолжит вставлять нули. Чтобы предотвратить это, эта версия переименовывает только файлы, заканчивающиеся двумя цифрами (с предшествующим хотя бы одной нецифровой):

rename 's/([^\d])(\d\d)$/${1}0$2/' foo*
  • s/// - команда замены
  • \d обозначает цифру
  • $& в первом примере обозначает все, что совпало между первыми двумя косыми чертами (в данном случае две цифры)
  • [^\d] обозначает все символы ([]), которые не являются (^) цифрами (\d)
  • ${1} обозначает то, что было найдено в первом наборе скобок (не цифра), скобки устанавливают "1" из буквального "0"
  • $2 соответствует тому, что было найдено во втором наборе скобок (две цифры), здесь скобки не нужны, но вы можете использовать их
1

Если вы используете MacPorts, есть пакет под названием renameutils. Я никогда не использовал это, но из описания, это может быть то, что вы хотите.

renameutils - инструменты, упрощающие переименование файлов. Описание ¶

Renameutils содержит 5 программ: qmv, qcp, imv, icp и deurlname

qmv и qcp используют текстовый редактор для создания "плана", который выполняется при сохранении файла - отлично подходит для пакетных перемещений

imv и icp - интерактивные программы с поддержкой GNU readline

deurlname удаляет закодированные символы URL из имени файла

Более подробная информация на домашней странице проекта http://www.nongnu.org/renameutils/

0

Посмотрите mmv (должен быть доступен для всех типов Linux, но редко устанавливается по умолчанию).

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