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

95

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

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

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

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

    
задан Jiew Meng 25.08.2011 в 03:18
источник

8 ответов

172

Я использую 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 to 01 Song.mp3

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

Суффикс

Добавить

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

Изменить

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

изменит Something.pdf на Something.doc . (Причина обратной косой черты: . является подстановочным символом в regexp, поэтому .pdf соответствует qPDF , тогда как \.pdf соответствует только точной строке .pdf . Также очень важно отметить, если вы не знакомы с BASH, вы должны поместить обратную косую черту в SINGLE-цитаты! Вы не можете пропустить кавычки или использовать двойные кавычки, или bash попытается их перевести. Для bash \. и "\." равно . . ( Но используются двойные кавычки и обратная косая черта, например «\ n» для новой строки, но поскольку "\." не является допустимой обратной escape-последовательностью, она переводится в . )

Собственно, вы можете даже заключить части строки в кавычки вместо целого: 's/Search/Replace/g' совпадает с s/'Search'/'Replace'/g и s/Search/Replace/g с BASH. Вам просто нужно быть осторожным в отношении специальных символов (и пробелов).

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

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

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

    
ответ дан Matt 25.08.2011 в 15:45
источник
21

Попробуйте pyrenamer .

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

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

    
ответ дан RolandiXor 25.08.2011 в 03:37
9

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

    
ответ дан sagarchalise 25.08.2011 в 09:06
8

В командной строке, чтобы переименовать один файл, команда просто

mv file1.txt file2.txt

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

#!/bin/bash
for 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"
    fi
done

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

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

    
ответ дан Dang Khoa 25.08.2011 в 04:19
7

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

    
ответ дан Rafał Cieślak 25.08.2011 в 17:13
7

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

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

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

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

Ссылка

    
ответ дан dempa 30.08.2011 в 22:47
3

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

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 , переименуйте имена файлов в строках, содержащих имена файлов, которые вы хотите переименовать; hit CTRL + O и CTRL + X :

. ├── 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 , переключите номера в строках, содержащих имена файлов, которые вы хотите переключить; hit CTRL + O и CTRL + X :

. ├── 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 , удалите строки, содержащие файлы, которые вы хотите удалить; hit CTRL + O и CTRL + X :

. └── baz     
ответ дан kos 10.02.2016 в 11:07
2

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

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

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

    
ответ дан Adobe 25.08.2011 в 08:49