【问题标题】:rename regex not working in cygwin重命名正则表达式在 cygwin 中不起作用
【发布时间】:2017-10-31 22:07:04
【问题描述】:

我在 windows 7 下使用 cygwin。 在我的目录中有像

这样的文件

fort.100 fort.101 ... fort.1xx

我想给他们一个扩展名_v1。 当我尝试使用rename by

来实现它时

rename 's/$/_v1/' fort.*

提示退出,没有错误并且没有任何反应。 然后我尝试了

rename -e 's/$/_v1/' fort.*,弹出错误,
rename: unknown option -- e

我还尝试使用不同的分隔符 @ 而不是 /,但没有成功。

现在,我认为这是由于表达式中的字符_(我是regex 的新手),我尝试通过\_ 转义它,但也没有运气。再次尝试不使用_,例如,

rename 's/$/v11/' fort.* - 什么也没有发生。

虽然我通过

实现了我的目标

for file in fort.*; do mv $file $file\_v1; done,我想知道为什么rename 不起作用。

我在这里做错了什么?是因为我在cygwin吗?

【问题讨论】:

  • 试试rename -E 's/$/_v1/' fort.*
  • @WiktorStribiżew 不起作用,退出并出现错误rename: unknown option -- E
  • 如果你做一个man rename,它是一个busybox light版本的二进制还是原来的binay?
  • @Esteban 这不是一个busybox light版本。 rename from util-linux 2.25.2 据我所知,它与 util-linux 一样。从标准 cygwin 存储库下载并编译。

标签: regex cygwin rename file-rename


【解决方案1】:

我找到了解决方法。 我将 util-linux rename 替换为 perl rename 一个单独的包。 这是由@subogero 提供的,来自GitHub
所有常用的rename 表达式都可以正常工作。

【讨论】:

    【解决方案2】:

    rename 的手册与您的期望不符。 我看不到正则表达式功能。

    SYNOPSIS
           rename [options] expression replacement file...
    
    DESCRIPTION
           rename  will  rename  the specified files by replacing the first occur‐
           rence of expression in their name by replacement.
    
    OPTIONS
           -v, --verbose
                  Give visual feedback which files where renamed, if any.
    
           -V, --version
                  Display version information and exit.
    
           -s, --symlink
                  Peform rename on symlink target
    
           -h, --help
                  Display help text and exit.
    
    EXAMPLES
           Given the files foo1, ..., foo9, foo10, ..., foo278, the commands
    
                  rename foo foo0 foo?
                  rename foo foo0 foo??
    
           will turn them into foo001, ..., foo009, foo010, ..., foo278.  And
    
                  rename .htm .html *.htm
    
           will fix the extension of your html files.
    

    你想达到的最简单的方法是:

    for i in fort*; do mv ${i} ${i}_v1 ; done
    

    【讨论】:

    • 您所描述的正是我提出的问题。我想知道为什么以及如何让它发挥作用。而且,我在问题中提供了您提到的相同脚本。
    • why 如重命名手册所述。 cygwin 提供的版本中不存在该功能。
    猜你喜欢
    • 2015-06-08
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2020-01-19
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多