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

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

  • foo01
  • foo02
  • bar001
  • bar002

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

19
задан Svish
12.12.2022 11:31 Количество просмотров материала 3075
Распечатать страницу

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
отвечен user31894 2022-12-13 19:19

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

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

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

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

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

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

renameutils содержит 5 программ: qmv, qcp, ИМВ, ДЦП, и deurlname

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

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

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

подробнее на главной странице проекта http://www.nongnu.org/renameutils/

1
отвечен KeithB 2022-12-13 23:53

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

0
отвечен Aaron Digulla 2022-12-14 02:10

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх