使用基于 perl 的重命名命令更改以破折号开头的文件名

Using the perl-based rename command to change filenames commencing with dashes

rename 是一个基于 perl 的命令行工具,用于重命名多个文件。

我无意中创建了许多名称以破折号或双破折号(---)开头或包含的文件。当我尝试使用重命名来摆脱破折号时,例如,'--the-file-name' 使用

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

rename(可以理解)抱怨 'the-file-name' 不是 rename 命令允许的选项。

有没有办法告诉 rename '--the-file-name' 是一个文件名而不是一个选项。

许多命令,包括 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

JRFerguson 的答案实际上适用于许多命令,而不仅仅是 rename

一些替代方法也适用于无法识别的命令 --:

  • 在文件名前加上 ./ 或完整路径:

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

    rename 's/-//g' $PWD/--*
    
  • 使用find(也会遍历任何子目录):

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

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