我希望使用该rename
命令来编辑文件名。更具体地说,我试图隔离特定的部分来更改,或者在某些情况下,更改整个名称。
例如:
假设我有三个目录...(test-file-1、example2、第三个)
如果我想将“test-file-1”更改为“file 1”
我知道我可以使用 rename 's/test-file-1/file 1/' *
如何设置通配符,这样我就不必给出要更改的显式文件名?
我试过了
rename 's/tes*/file 1/' *
无济于事
同样,我想知道是否可以使用通配符更改整个文件名。
我试过了
rename 's/^*/file 1/' test*
我不完全确定是否可以使用第二个星号来匹配要处理的文件,但同样的问题也适用于该问题。
答案1
您没有正确使用正则表达式。tes*
意味着后面te
有任意数量的s,因此将被重命名为:s
test-file-1
file 1t-file-1
$ rename -n 's/tes*/file 1/' *
test-file-1 renamed as file 1t-file-1
类似地,^*
将匹配开头出现的空字符串,因此实际上它就像^
,但具有无限循环:
$ rename -n 's/^*/file 1/' *
^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE / at (eval 1) line 1.
example2 renamed as file 1example2
^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE / at (eval 2) line 1.
test-file-1 renamed as file 1test-file-1
^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE / at (eval 3) line 1.
third renamed as file 1third
相反,您应该使用.*
-.
匹配除换行符之外的所有字符,通常:
$ rename -n 's/tes.*/file 1/' *
test-file-1 renamed as file 1
$ rename -n 's/.*/file 1/' *
example2 renamed as file 1
test-file-1 renamed as file 1
third renamed as file 1
当然,我希望最后一个命令会产生问题。