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

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

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

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

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

111
задан 22 October 2018 в 04:18

8 ответов

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

rename "s/SEARCH/REPLACE/g"  *

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

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

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

sudo apt install rename

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

Prefix

Add:

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

Remove:

Также вы можете удалить ненужные строки. Допустим, у вас было 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 в любой части имени файла. Символы ^ гарантируют удаление только в том случае, если они являются началом файла.

Суффикс

Add:

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

Change:

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

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

На самом деле, можно даже заключить части строки в кавычки, а не целиком: 's/Search/Replace/g' такая же, как и s/'Search'/'Replace'/g и s/Search/Replace/g to BASH. Просто будьте осторожны со специальными символами (и пробелами).


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

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

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

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

197
ответ дан 22 November 2019 в 23:00

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

7
ответ дан 22 November 2019 в 23:00

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

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

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

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

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

7
ответ дан 22 November 2019 в 23:00

Если единственный подходящий вариант - переименование файлов вручную, отличный способ сделать это - использовать 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 , переименуйте имена файлов в строках, содержащих имена файлов, которые вы хотите переименовать; нажмите 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
3
ответ дан 22 November 2019 в 23:00

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

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

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

Thunar bulk renamer

21
ответ дан 22 November 2019 в 23:00

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

enter image description here

9
ответ дан 22 November 2019 в 23:00

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

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 не настолько велик, но это только я.)

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

8
ответ дан 22 November 2019 в 23:00

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

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

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

2
ответ дан 22 November 2019 в 23:00

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

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