使用通配符进行批量重命名?

使用通配符进行批量重命名?

我意识到我已经以逐个方式命名了一堆文件,所以我想将任何以“1”开头的文件重命名为以 2 开头的相同名称。

例如mv 1.4.5.txt 2.4.5.txtmv 1-chart.jpg 2-chart.jpg等等。

我尝试过,但是由于它被解释为目录mv 1* 2*所以不被接受。2*

答案1

通配符不起作用。看看 的结果echo mv 1* 2*。更好的方法是 ( man rename):

rename 's/^1/2/' 1*

答案2

如果您安装的话,您可以用这种方式使用通配符mmv(尽管它们必须被引用 - 这样它们由其mmv本身而不是 shell 来解释),并且替换通配符采用以下形式#n来重新替换模式中的第 n 个通配符

Usage: mmv [-m|x|r|c|o|a|l] [-h] [-d|p] [-g|t] [-v|n] [from to]

Use #[l|u]N in the ``to'' pattern to get the [lowercase|uppercase of the]
string matched by the N'th ``from'' pattern wildcard.

A ``from'' pattern containing wildcards should be quoted when given
on the command line. Also you may need to quote ``to'' pattern.

Use -- as the end of options.

例如

$ mmv -n -- '1*' 2#1
1.sh -> 2.sh : delete old 2.sh? n
1-chart.jpg -> 2-chart.jpg
1.4.5.txt -> 2.4.5.txt
1.csv -> 2.csv

(该-n选项允许您进行试运行 - 将其删除以实际重命名文件。)

相关内容