【问题标题】:Using the perl-based rename command to change filenames commencing with dashes使用基于 perl 的重命名命令更改以破折号开头的文件名
【发布时间】:2019-09-20 22:17:28
【问题描述】:

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

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

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

重命名(可以理解)抱怨“文件名”不是重命名命令的允许选项。

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

【问题讨论】:

    标签: perl command-line file-rename


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

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

      【讨论】:

      • 请注意,rename 完全按照给定的方式将转换应用于路径名,而不仅仅是最后一个组件,因此如果$PWD 中有任何破折号,rename 's/-//g' $PWD/--* 将是不好的。
      • 好点。 find 解决方案还将(相对)路径名传递给 rename
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 2016-05-02
      • 2021-06-04
      • 2023-04-02
      • 2016-05-29
      • 2015-12-11
      相关资源
      最近更新 更多