我在Windows 7下使用Cygwin。在我的目录中有
之类的文件 fort.100
fort.101
...
fort.1xx
我想给他们全部扩展_v1
。当我尝试使用
rename
实现它时 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
的手册与您的期望不符。我认为没有正则能力。
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
我找到了解决方法。我将util-linux rename
替换为perl rename
单独的软件包。这是从GitHub
提供的@subogero。
所有常见的rename
表达式都在起作用。