Переименуйте несколько файлов одновременно

У меня есть приблизительно 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
3
задан 17 March 2020 в 01:13

7 ответов

Переименование файлов с помощью mmv:

$ mmv '???-*' '#4'

Вы могли также использовать классы символов для более строгого соответствия:

$ mmv '[0-9][0-9][0-9]-*.txt' '#4.txt'
6
ответ дан 7 April 2020 в 23:35

С основанным на 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 после того как Вы рады, что это делает правильную вещь.

10
ответ дан 7 April 2020 в 23:35

Так как я не вижу, что это упомянуло здесь все же, можно использовать 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 или это - разработка всегда, я просто нахожу это неоценимым экономящим время инструментом.

1
ответ дан 7 April 2020 в 23:35

Будучи подозрительным человеком, не доверяя моим собственным пальцам, я обычно создаю сценарий оболочки для переименования каждого файла. Я поместил вывод ls в файл, который я редактирую для создания сценария. Супер тривиальный в emacs, вероятно, столь же легком в энергии. Если все еще не уверенный во мне, у меня могли бы быть файлы во временном подкаталоге на всякий случай, что-то пошло не так, как надо. Я, вероятно, использовал бы subdir при использовании mmv, также.

0
ответ дан 7 April 2020 в 23:35

Используя для цикла:

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]$
0
ответ дан 7 April 2020 в 23:35

Я знаю, что вопрос отмечен с командной строкой, но если инструмент GUI был бы полезен для Вас, файловый менеджер Thunar имеет большую часть - переименовывают инструмент. Можно установить Thunar непосредственно от диспетчера пакетов. После того как это установлено, выберите файлы интереса и затем пойдите для "Переименовывания" в соответствии с меню Edit.

Одно большое преимущество Thunar состоит в том, что он дает Вам предварительный просмотр новых имен, таким образом, Вы не должны получать свою команду, или regex точно исправляются в первый раз. Это может также сделать задачи переименования, которые являются вне области regexes, как вставка последовательных чисел в имена файлов.

Существует больше информации о Thunar на веб-сайте пакета Ubuntu. Журнал Бесплатного программного обеспечения имеет хорошую статью обзора об этом также со снимками экрана.

0
ответ дан 7 April 2020 в 23:35

Я часто делал это в прошлом использовании bulkrename команда в ranger, на терминальном основанный файловый браузер. Шаги следующие:

  1. Перейдите к каталогу, который содержит файлы.
  2. Выберите все файлы, которые будут переименованы. Если Вы хотите выбрать все в рамках того каталога, просто нажмите v.
  3. Используйте :bulkrename команда, это берет Вас к списку всех выбранных имен файлов в энергии или Вашем редакторе по умолчанию.
  4. Управляйте именами файлов в энергии к Вашей симпатии и сохраните!
0
ответ дан 7 April 2020 в 23:35

Другие вопросы по тегам:

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