Unix: Поиск и замена в именах файлов

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

  • foo01
  • foo02
  • bar001
  • bar002

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

0
задан 30.07.2010, 16:57

4 ответа

#!/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
2
ответ дан 24.11.2019, 03:39

Существует сценарий 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
ответ дан 24.11.2019, 03:39

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

renameutils - инструменты, которые делают файлы переименования более легким Описанием ¶

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

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

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

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

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

1
ответ дан 24.11.2019, 03:39

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

0
ответ дан 24.11.2019, 03:39

Теги

Похожие вопросы