Один из способов, которыми я быстро переименовываю файлы в Windows,
F2 > Rename > Tab (to next file) > Rename ...
Но в Ubuntu/Наутилусе, я не могу снабдить вкладками в следующий файл. Но будучи на Linux, я думаю, что должна быть альтернатива командной строки.
Однако иногда я могу хотеть больше управления тем, как переименовать определенные файлы. В этом случае, возможно, лучше, чтобы смочь снабдить вкладками в следующий файл
я постоянно использую переименование
. Это довольно просто, но, надеюсь, вы знаете основной регекс:
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
Вот несколько примеров:
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
для установки
Если вы хотите сделать это без командной строки, как в Windows, используйте правую клавишу со стрелкой вместо клавиши табуляции . При этом будет выбран следующий файл так же, как табуляция в Windows.
На самом деле это не тот же вопрос, что и Как можно переименовать сразу много файлов?, но я собираюсь предложить ту же самую программу, которую я предложил в этом ответе: qmv.
qmv - удобный инструмент из пакета renameutils. Она позволяет использовать ваш любимый текстовый редактор для переименования файлов. В сочетании с возможностями vim, у вас есть отличная утилита для переименования.
qmv -f do обычно я вызываю ее как qmv -f do
в dir, где я хочу переименовать кучу файлов. Или если я хочу переименовать рекурсивно qmv -R -f do
.
Всякий раз, когда мне нужно переименовать несколько файлов, я всегда возвращаюсь к qmv (и vim).
Если единственный подходящий вариант - переименование файлов вручную, отличный способ сделать это - использовать 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 :
.
├── 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 :
.
├── 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 :
.
└── baz
Попробуйте пиренамер.
Он не интегрирован с "Наутилусом", но он выполняет свою работу. Здесь - обзор.
Thunar (часть XFCE) также имеет переименовыватель, который можно запускать отдельно.
Похоже, что на стартовой площадке есть проект под названием nautilus-renamer. Вы можете установить его, запустив make install
после загрузки скрипта и распаковки. Кажется, что он имеет некоторые функции или, если вы знаете, некоторые программы могут быть вы можете просто увеличить его к вашим потребностям, как это просто питон скрипт.
В командной строке, чтобы переименовать один файл, команда просто
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 не настолько велик, но это только я.)
Обратите внимание, что я получил разделение имени файла и расширения из ранее заданного вопроса.
Я использую krename. Это приложение с графическим интерфейсом. Оно может читать mp3 теги и т.д.
Оно существует как отдельное приложение, так и часть Krusader.
Есть также скрипт переименования
- который является частью стандартной perl-инсталляции (Вы, вероятно, установили его). Проверьте его с помощью man rename
.