如果匹配,则重命名目录树中所有文件的部分名称

如果匹配,则重命名目录树中所有文件的部分名称

我有一个像这样的目录树

.
|-- players
|   |-- red_alice.plr
|   |-- red_bob.plr
|-- resources
|   |-- red_cash.rsc
|   |-- red_food.rsc

我想遍历所有目录并将以“red”开头的任何文件重命名为以“blue”开头......

我认为这是 find 和 sed 命令的工作,但我不确定如何表述这种情况...我知道例如我可以通过以下方式查找文件

find . -name "red*" -type f

那么如何使用这个输出将红色重命名为蓝色呢?

答案1

您可以使用重命名命令来完成此操作:

find . -type f -name "red*" -exec rename  s/red/blue/g "{}" +;

因此,它将找到名称开头的文件red,然后将所有这些文件放入单个命令中,例如

 rename s/red/blue/g red_first red_second

它将搜索当前目录下的所有目录中的文件。

答案2

也许是这样的:

find . -name "red_*" -exec bash -c 'echo mv "{}" "$(echo "{}" | sed "s%/red_%/blue_%" )"' \;

这只是打印命令。很高兴检查它是否真的有效。如果您验证了这一点,请删除echo之前的mv.

相关内容