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

Восстановленные файлы с TestDisk, но имена файлов и структура папок плохо
Нераспознанный символ в имени файла (linux)
Какие символы недопустимы для имени файла MS-DOS?
Trim имена файлов Tarballs с помощью Bash
Как я могу scp, когда путь и / или имя файла для копирования имеют пробелы?
Получить имя файла без расширения в Bash
Как узнать имя и путь запущенного приложения gui на linux?
Обрабатывать имя файла с пробелами внутри Bash-скрипта
Создание XLS или CSV из имен файлов в папке на Windows?
OneDrive для бизнеса длинные имена файлов не будет тонуть на одном компьютере, хорошо на других
Экранирование %в именах файлов и папок в командной строке [дубликат]
Длина имени файла Windows 7 ограничена 129 символами
Слишком длинные имена файлов и Windows не удается открыть файлы
Как удалить файл с слишком длинным путем для удаления [дубликат]
функция автоматического удаления специальных символов из имен файлов при сохранении в MacOS X

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

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

  • foo01
  • foo02
  • bar001
  • bar002

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

5
задан Svish
источник

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 2010-07-31 02:13:32
источник

есть скрипт на 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 2010-07-30 14:47:37
источник

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

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

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

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

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

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

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

1
отвечен KeithB 2010-07-30 15:27:04
источник

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

0
отвечен Aaron Digulla 2010-07-30 15:29:17
источник

Другие вопросы filenames regex sed unix