定义重命名命令范围;替换单词;替换整个文件名;通配符

定义重命名命令范围;替换单词;替换整个文件名;通配符

我希望使用该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,因此将被重命名为:stest-file-1file 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

当然,我希望最后一个命令会产生问题。

相关内容