Intereting Posts
Как остановить торн от Видалии? Я не могу выбрать обновления в диспетчере обновлений Проблемы с подключением к Bluetooth-гарнитуре – 14.04 – проблема возникает снова Резервное копирование Flashdrive Как изменить размер раздела? Не удалось войти в систему как пользователь root из экрана входа в систему, хотя у меня есть учетная запись root Есть ли файловый менеджер Linux с соответствующим раскрывающимся деревом? (например, искатель в OS X) Как установить и настроить X11RDP? Как настроить Ubuntu + Win 8 в virtualbox, когда Win 8 предварительно установлен? Инструкции Xenial Xerus «оригами животных»? Удалить единство и установить KDE? Как обратиться к ssh-серверу с субдоменом для удаленного доступа? Как обновить youtube-dl с помощью терминала Отключить различия в обработке входа (не интерактивные, интерактивные и т. Д.) nautilus-compare (объединение с nautilus) и другие nautilus-actions-дополнительные пакеты, не работающие с Ubuntu 13.04

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

Одним из способов быстрого переименования файлов в 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 (aka Perl rename ), которая поддерживает полные регулярные выражения Perl. Существует другое rename которое использует шаблоны и не столь мощно. prename устанавливается по умолчанию на Ubuntu (вместе с Perl).


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

Префикс

Добавить :

 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 . (Причина обратной косой черты qPDF Является символом подстановки в 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 -ns/'One'/'Two'/g * 

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

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

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

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

Объемный переименователь Thunar

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

введите описание изображения здесь

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

 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 не так уж хорош, но это только я.)

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

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

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

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

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

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

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

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

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

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

Если единственным подходящим вариантом является переименование файлов вручную, отличный способ сделать это – использовать 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