Использование команды переименования на основе Perl для изменения имен файлов, начинающихся с тире - PullRequest
1 голос
/ 02 мая 2019

rename - это инструмент командной строки на основе Perl для переименования нескольких файлов.

Я случайно создал множество файлов с именами, которые начинаются или содержат тире или двойной тире (- или --). Когда я пытаюсь использовать переименование, чтобы избавиться от дефисов, например, '--the-file-name', используя

rename 's/-//g' --the-file-name

rename (понятно) жалуется, что «имя-файла» не является допустимым параметром для команды переименования.

Есть ли способ сообщить переименованию, что '--the-file-name' является именем файла, а не параметром.

Ответы [ 2 ]

3 голосов
/ 02 мая 2019

Многие команды, в том числе сценарий Perl rename, поддерживают двойную черту, обозначающую конец параметров команды. Следовательно, переименовать --the-file-name в the-file-name:

rename 's/-//g' -- --the-file-name

Модуль Perl Getopt :: Long поддерживает это и используется rename.

В общем, см. Также: https://unix.stackexchange.com/questions/11376/what-does-double-dash-mean-also-known-as-bare-double-dash

1 голос
/ 02 мая 2019

Ответ JRFerguson на самом деле работает для многих команд, а не только для rename.

Некоторые альтернативы также работают для команд, которые не распознают --:

  • Префикс имени файла с ./ или полный путь к нему:

    rename 's/-//g' ./--*
    

    или

    rename 's/-//g' $PWD/--*
    
  • Используйте find (который также будет проходить через любые подкаталоги):

    find . -name '-*' -exec rename 's/-//g' '{}' ';'
    

    или

    find . -name '-*' -exec rename 's/-//g' '{}' +
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...