Как мне легко переименовать несколько файлов с помощью командной строки?

Один из способов быстрого переименования файлов в Windows - это

F2 > Rename > Tab (to next file) > Rename ...

Но в Ubuntu/Nautilus я не могу перейти к следующему файлу. Но, находясь в Linux, я думаю, что должна быть альтернатива командной строке.

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

Я использую rename все время. Это довольно просто, но, надеюсь, вы знаете основные регулярные выражения:

rename "s/SEARCH/REPLACE/g"  *

Это заменит строку SEARCH с REPLACE в каждом файле (то есть, *). В /g означает глобальный, так что если бы у вас был SEARCH_SEARCH.jpg, он был бы переименован REPLACE_REPLACE.jpg. Если бы у вас не было /g, он сделал бы замену только один раз и, таким образом, теперь называется REPLACE_SEARCH.jpg. Если вы хотите, чтобы регистр не учитывался, добавьте /i (это было бы, /gi или /ig в конце).

С помощью регулярных выражений вы можете сделать гораздо больше.

Обратите внимание, что это rename это prename (он же Perl rename) команда, которая поддерживает полные регулярные выражения Perl. Есть еще один rename который использует шаблоны и не такой мощный. prename раньше он устанавливался по умолчанию в Ubuntu (вместе с Perl), но теперь вам, возможно, придется сделать:

sudo apt install rename

Вот несколько примеров:

Префикс

Добавь:

rename 's/^/MyPrefix_/' * 
  • document.pdf переименован в MyPrefix_document.pdf

Удалять:

Также вы можете удалить ненужные строки. Допустим, у вас было 20 MP3-файлов с такими именами, как CD RIP 01 Song.mp3 и вы хотели удалить часть "CD RIP", и вы хотели удалить ее из всех них с помощью одной команды.

rename 's/^CD RIP //' *
  • CD RIP 01 Song.mp3 к 01 Song.mp3

Обратите внимание на дополнительное пространство в '^CD RIP ', без пробела все файлы будут иметь пробел в качестве первого символа файла. Также обратите внимание, что это будет работать без ^ характер, но соответствовал бы CD RIP в любой части имени файла. То ^ гарантирует, что он удаляет символы только в том случае, если они являются началом файла.

Суффикс

Добавь:

rename 's/$/_MySuffix/' *
  • document.pdf переименован в document.pdf_MySuffix

Изменить:

rename 's/\.pdf$/.doc/' *

изменится Something.pdf в Something.doc. (Причиной обратной косой черты является, . является подстановочным знаком в регулярном выражении, поэтому .pdf спички qPDF в то время как \.pdf соответствует только точной строке .pdf. Также очень важно отметить, что если вы не знакомы с BASH, вы должны заключить обратную косую черту в ОДИНАРНЫЕ кавычки! Вы не можете опускать кавычки или использовать двойные кавычки, иначе bash попытается перевести их. Чтобы поколотить \. и "\." равняется .. (Но используются двойные кавычки и обратная косая черта, например "\n" для новой строки, но поскольку "\." не является допустимой обратной escape-последовательностью, она преобразуется в .)

На самом деле, вы даже можете заключить части строки в кавычки вместо целого: 's/Search/Replace/g' это то же самое, что и s/'Search'/'Replace'/g и s/Search/Replace/g чтобы ПОКОЛОТИТЬ. Вы просто должны быть осторожны со специальными символами (и пробелами).


Я предлагаю использовать -n вариант, когда вы не уверены, что у вас есть правильные регулярные выражения. Он показывает, что будет переименовано, а затем завершает работу, не делая этого. Например:

rename -n s/'One'/'Two'/g *

Здесь будут перечислены все изменения, которые он внес бы, если бы вы не поместили -n флаг там. Если это выглядит хорошо, нажмите Up чтобы вернуться назад, затем сотрите -n и нажмите Enter (или замените его на -v для вывода всех внесенных изменений).

Примечание: Версии Ubuntu выше 17.04 не поставляются с rename однако по умолчанию он по-прежнему доступен в репозиториях. Воспользуйся sudo apt install rename чтобы установить его

Попробуй пиренамер.

Он не интегрирован с nautilus, но выполняет свою работу. Здесь это обзор.

Тунар (часть XFCE) также имеет средство переименования, которое вы можете запускать отдельно.

Thunar bulk renamer

Кажется, на launchpad есть проект под названием наутилус-переименователь. Вы можете установить его, выполнив make install как только вы загрузите скрипт и разархивируете его. Кажется, у него есть некоторые функциональные возможности, или, если вы знаете какое-то программирование, возможно, вы могли бы просто улучшить его в соответствии с вашими потребностями, поскольку это всего лишь скрипт на python.

enter image description here

На самом деле это не тот же вопрос, что и Как можно переименовать сразу много файлов? но я собираюсь предложить ту же программу, которую я предложил в этом ответе: qmv.

qmv - это удобный инструмент из пакета renameutils. Это позволяет вам использовать ваш любимый текстовый редактор для переименования файлов. В сочетании с возможностями vim у вас есть отличная утилита для переименования.

Обычно я вызываю его следующим образом qmv -f do в каталоге, где я хочу переименовать кучу файлов. Или если я хочу переименовать рекурсивно qmv -R -f do.

Всякий раз, когда у меня возникает необходимость переименовать несколько файлов, я всегда возвращаюсь к qmv (и vim).

http://www.nongnu.org/renameutils/

В командной строке для переименования одного файла команда просто

mv file1.txt file2.txt

Если вы хотите сделать это в пакетном режиме, вы, вероятно, захотите сделать это с помощью скрипта. Если вы предоставите более подробную информацию, я или кто-то другой, вероятно, смогу приготовить ее для вас. Тем не менее, сценарий для добавления материала в файл может выглядеть следующим образом:

#!/bin/bashfor file in *do    # separate the file name from its extension    if [[ $file == *.* ]]; then      ext="${file##*.}"      fname="${file%.*}"      mv "$file" "${fname}_APPENDSTUFFHERE.$ext"    else      mv "$file" "${file}_APPENDSTUFFHERE"    fidone

В зависимости от того, как именно вам нужно переименовать вещи, это, скорее всего, будет изменено, например, если у вас есть определенные правила переименования, которым нужно следовать. (Лично я бы сделал это с помощью скрипта Perl, так как мой bash-foo не так уж хорош, но это только я.)

Обратите внимание, что я получил разделение имени файла и расширения от ранее заданный вопрос.

В случае, если вы хотите сделать это без командной строки, аналогично тому, что вы делали в Windows, используйте клавиша со стрелкой вправо вместо клавиша tab. Это позволит выбрать следующий файл точно так же, как это делает вкладка в Windows.

Если единственным подходящим вариантом является переименование файлов вручную, отличным способом сделать это является использование vidirmoreutils посылка):

sudo add-apt-repository universe && sudo apt-get update && sudo apt-get install moreutils
DESCRIPTION       vidir allows editing of the contents of a directory in a text editor.       If no directory is specified, the current directory is edited.       When editing a directory, each item in the directory will appear on       its own numbered line. These numbers are how vidir keeps track of what       items are changed. Delete lines to remove files from the directory, or       edit filenames to rename files. You can also switch pairs of numbers       to swap filenames.       Note that if "-" is specified as the directory to edit, it reads a       list of filenames from stdin and displays those for editing.       Alternatively, a list of files can be specified on the command line.

Примеры


Выборочное переименование файлов

Содержимое текущего рабочего каталога:

.├── bar├── baz└── foo

Бежать vidir, переименуйте имена файлов в строках, содержащих имена файлов, которые вы хотите переименовать; нажмите CTRL+O и CTRL+X:

screenshot3

.├── bar.bak├── baz.old└── foo.new

Выборочное переключение имен файлов

Содержимое текущего рабочего каталога:

.├── bar├── baz└── foo

Содержимое файлов текущего рабочего каталога:

$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done- bar:This is bar- baz:This is baz- foo:This is foo$ 

Бежать vidir, переключите числа в строках, содержащих имена файлов, которые вы хотите переключить; нажмите CTRL+O и CTRL+X:

screenshot4

.├── bar├── baz└── foo
$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done- bar:This is foo- baz:This is bar- foo:This is baz$ 

Выборочное удаление файлов

Содержимое текущего рабочего каталога:

.├── bar├── baz└── foo

Бежать vidir, удалите строки, содержащие файлы, которые вы хотите удалить; нажмите CTRL+O и CTRL+X:

screenshot2

.└── baz

Я использую krename. Это приложение с графическим интерфейсом. Он мог считывать mp3-теги и так далее.

Он существует как отдельное приложение, а также как часть Krusader.

Там также есть rename скрипт - который является частью стандартной установки perl (вероятно, он у вас установлен). Проверьте это с помощью man rename.

Не могли бы вы дать определение термину “больше контроля”? Не уверен, о чем именно вы спрашиваете…

Я думаю, что на этот вопрос нет ответа. То, что вы просите (F2, а затем перейти в режиме F2 к следующему файлу), в настоящее время, я думаю, недоступно в Nautilus.