我有一个像这样的目录树
.
|-- 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
.