Я должен быть очень тупым, потому что даже после прочтения человека для переименования и множества примеров сценариев, которые другие предоставили на разных досках объявлений, я все еще не могу даже понять, что на самом деле означает синтаксис команды rename.
Я пытаюсь изучить команды bash, и я понимаю, насколько опасно просто копировать & amp; запускать команды из Интернета, фактически не понимая, что и что более важно, почему они «делают то, что делают». Итак, может кто-то, пожалуйста, помогите мне понять, что означают условия для команды rename, чтобы я мог построить свой собственный рабочий & amp; точная команда?
Для специфики я загрузил более 40 видеороликов YouTube в один и тот же каталог, и все они заканчиваются на -fgrhegrvbfv (каждый из них имеет абсолютно случайные символы после -). Я просто хочу удалить - и 12 символов после него в каждом имени файла. Большое спасибо!
Первый параметр - это фрагмент Perl, который преобразует старое имя (в $_) в новое, а остальные параметры - это файлы, которые будут работать. В вашем случае вы сделаете следующее:
rename 's/-.{12}$//' *
Вот один из способов сделать это:
$ ls
file2-fdsa file-asdf
$ prename -nv 's/(.*)-(.*)/$1/' *-*
file-asdf renamed as file
file2-fdsa renamed as file2
Как это работает, мы имеем две «группы» совпадающих символов. Итак, сначала (.*) будет тем, что есть до -, а второе (.*) будет тем, что после -. Мы можем ссылаться на них через $1 для групп 1 и $2 для группы 2 (которая не используется).
*-* сообщает оболочке принимать все файлы с - в ней и передавать их в качестве аргументов в команду rename. Эта часть не имеет ничего общего с rename, но с оболочкой. Это просто делает нашу жизнь немного легче.
Теперь вся команда может быть прочитана: «Возьмите все файлы, которые имеют - в них, и для каждого имени файла разбивайте его на две группы и переименуйте этот файл только в том, что находится в первой группе "
Обратите внимание на пару вещей:
флаг -n используется только для сухого хода. Удалите этот флаг, который вы хотите выполнить на самом деле. флаг -v используется для получения подробного вывода того, что prename действительно делает prename, таким же, как rename. Там только немного беспорядка с debian пакетов и что поддерживается. См. Это для получения дополнительной информации. Обратите внимание, что некоторые оболочки, такие как ksh, имеют собственную встроенную команду rename, которая отличается от переименования perl.Первый параметр - это фрагмент Perl, который преобразует старое имя (в $_) в новое, а остальные параметры - это файлы, которые будут работать. В вашем случае вы сделаете следующее:
rename 's/-.{12}$//' *
Вот один из способов сделать это:
$ ls
file2-fdsa file-asdf
$ prename -nv 's/(.*)-(.*)/$1/' *-*
file-asdf renamed as file
file2-fdsa renamed as file2
Как это работает, мы имеем две «группы» совпадающих символов. Итак, сначала (.*) будет тем, что есть до -, а второе (.*) будет тем, что после -. Мы можем ссылаться на них через $1 для групп 1 и $2 для группы 2 (которая не используется).
*-* сообщает оболочке принимать все файлы с - в ней и передавать их в качестве аргументов в команду rename. Эта часть не имеет ничего общего с rename, но с оболочкой. Это просто делает нашу жизнь немного легче.
Теперь вся команда может быть прочитана: «Возьмите все файлы, которые имеют - в них, и для каждого имени файла разбивайте его на две группы и переименуйте этот файл только в том, что находится в первой группе "
Обратите внимание на пару вещей:
флаг -n используется только для сухого хода. Удалите этот флаг, который вы хотите выполнить на самом деле. флаг -v используется для получения подробного вывода того, что prename действительно делает prename, таким же, как rename. Там только немного беспорядка с debian пакетов и что поддерживается. См. Это для получения дополнительной информации. Обратите внимание, что некоторые оболочки, такие как ksh, имеют собственную встроенную команду rename, которая отличается от переименования perl.