Четкое объяснение синтаксиса для переименовывает команду

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

Я пытаюсь изучить команды удара, и я понимаю, как опасный это должно просто скопировать и команды выполнения с Интернета, на самом деле не понимая то, что и что еще более важно почему они "делают то, что они делают". Так, кто-то может помочь мне понять то, что условия для переименовать средней команды, так, чтобы я мог, создали мою собственную работу и точную команду?

Для специфических особенностей я загрузил более чем 40 видео YouTube в тот же каталог, и они все заканчивают в -fgrhegrvbfv (у каждого есть полностью случайные символы после-). Я просто хочу удалить - и эти 12 символов после него в каждом имени файла.Большое спасибо!

2
задан 4 May 2017 в 06:03

2 ответа

Вот один из способов сделать это:

$ 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.
0
ответ дан 2 December 2019 в 03:40

Первый параметр является отрывком Perl, который преобразовывает старое название (в $_) к новому и остальной части параметров файлы для работы на. В Вашем случае Вы сделали бы это:

rename 's/-.{12}$//' *
2
ответ дан 2 December 2019 в 03:40

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

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