У меня есть приблизительно 180 файлов с той же структурой: 000-aaaaaaaa.txt
.
Регулярное выражение для имени файла: /^[0-9]{3}\-[a-zA-Z]+$/gi
(3 цифры + -
+ буквы + .txt
).
Я хотел бы к сокращению части цифры и -
в каждом имени файла
Например,
000-hello.txt
-> hello.txt
001-world.txt
-> world.txt
002-ubuntu.txt
-> ubuntu.txt
003-linux.txt
-> linux.txt
Переименование файлов с помощью mmv:
$ mmv '???-*' '#4'
Вы могли также использовать классы символов для более строгого соответствия:
$ mmv '[0-9][0-9][0-9]-*.txt' '#4.txt'
С основанным на Perl rename
команда:
$ rename -n 's/\d{3}-//' [0-9][0-9][0-9]-*.txt
rename(000-hello.txt, hello.txt)
rename(001-world.txt, world.txt)
rename(002-ubuntu.txt, ubuntu.txt)
rename(003-linux.txt, linux.txt)
Если количество файлов является достаточно большим, чтобы заставить команду превысить оболочку ARG_MAX
, затем Вы могли использовать также
printf '%s\0' [0-9][0-9][0-9]-*.txt | xargs -0 rename -n 's/\d{3}-//'
или
find . -maxdepth 1 -name '[0-9][0-9][0-9]-*.txt' -exec rename -n 's/\d{3}-//' {} +
Отметьте это [0-9][0-9][0-9]-*.txt
обрабатывается оболочкой и должно быть выражение шарика оболочки, а не регулярное выражение.
Удалите -n
после того как Вы рады, что это делает правильную вещь.
Так как я не вижу, что это упомянуло здесь все же, можно использовать repren. В то время как это не установлено по умолчанию, это действительно поддерживает основанное на регулярном выражении переименование файла. Можно сделать просто единственный образец регулярного выражения как так:
repren --rename --from "^[0-9]{3}" --to "" --dry-run .
Вышеупомянутый пример удаляет первые 3 цифры во всех именах файлов, если они вначале этого для всех файлов рекурсивно в текущем каталоге. Это делает пробный прогон, хотя показать Вам, что это обойдется без фактического выполнения, это - удаляет --dry-run
бит, после того как Вы уверены, что он сделает то, что Вы предназначаете.
repren
также файлы шаблона поддержек, позволяя Вам сделать несколько замен в 1 идут:
repren --rename --patterns=path/to/patternfile
Файл шаблона похож на это:
regex_1<tab_character>replacement_1
regex_2<tab_character>replacement_2
... и так далее.
Наконец, это поддерживает группы регулярного выражения. Рассмотрите этот файл шаблона:
# This is a comment
figure ([0-9+])<tab>Figure \1
\1
синтаксис вставляет содержание первого (bracketed)
группа. Чтобы сделать это на командной строке, необходимо было бы использовать одинарные кавычки, я думаю (исправьте меня, если я неправ):
repren --rename --from 'figure ([0-9+])' --to 'Figure \1' --dry-run path/to/directory_or_files_here
Это просто царапает поверхность какой repren
способно к все же. Это может дополнительно изменить содержание файлов также (следовательно потребность в --rename
во всех вышеупомянутых примерах).
Отказ от ответственности: Я не аффилирован с repren
или это - разработка всегда, я просто нахожу это неоценимым экономящим время инструментом.
Будучи подозрительным человеком, не доверяя моим собственным пальцам, я обычно создаю сценарий оболочки для переименования каждого файла. Я поместил вывод ls в файл, который я редактирую для создания сценария. Супер тривиальный в emacs, вероятно, столь же легком в энергии. Если все еще не уверенный во мне, у меня могли бы быть файлы во временном подкаталоге на всякий случай, что-то пошло не так, как надо. Я, вероятно, использовал бы subdir при использовании mmv, также.
Используя для цикла:
files=$(ls); for file in $files; do mv $file $(echo $file | cut -c 5-); done
Я не великое bash
сценарист, но это - то, как я приблизился бы к проблеме, если бы я не имел mmv
.
Пример:
[cutrightjm@headdesk unix]$ ls
000-file.txt 002-fileasdf.txt 123-sdfsdf.asdf
[cutrightjm@headdesk unix]$ files=$(ls)&& for file in $files; do mv $file $(echo $file | cut -c 5-); done
[cutrightjm@headdesk unix]$ ls
fileasdf.txt file.txt sdfsdf.asdf
[cutrightjm@headdesk unix]$
Я знаю, что вопрос отмечен с командной строкой, но если инструмент GUI был бы полезен для Вас, файловый менеджер Thunar имеет большую часть - переименовывают инструмент. Можно установить Thunar непосредственно от диспетчера пакетов. После того как это установлено, выберите файлы интереса и затем пойдите для "Переименовывания" в соответствии с меню Edit.
Одно большое преимущество Thunar состоит в том, что он дает Вам предварительный просмотр новых имен, таким образом, Вы не должны получать свою команду, или regex точно исправляются в первый раз. Это может также сделать задачи переименования, которые являются вне области regexes, как вставка последовательных чисел в имена файлов.
Существует больше информации о Thunar на веб-сайте пакета Ubuntu. Журнал Бесплатного программного обеспечения имеет хорошую статью обзора об этом также со снимками экрана.
Я часто делал это в прошлом использовании bulkrename
команда в ranger
, на терминальном основанный файловый браузер. Шаги следующие:
v
.:bulkrename
команда, это берет Вас к списку всех выбранных имен файлов в энергии или Вашем редакторе по умолчанию.