将包含子字符串“foo”的文件重命名为“bar”

5
我希望能够重命名给定文件夹中包含子字符串“foo”的所有文件,并将其替换为“bar”。我应该如何完成此操作?
更新:
for i in ./*foo*; do mv "$i" "${i//foo/bar}";done 

运行成功!

1个回答

3

如果你有随同perl一起提供的rename(1)(Debian提供),你可以使用以下命令:

cd /path/to/directory
rename 's/foo/bar/g' *

如果你有另外一个 rename(1) (我在Red Hat Enterprise Linux和一些其他发行版中看到过,它来自util-linux),你可以尝试以下操作:

cd /path/to/directory
rename foo bar *foo*

您可以通过尝试 rename -V 来检查您拥有哪个版本的rename。如果它无法识别该标志,则是perl版本。如果它打印版本信息,则是其他版本。

1
我正在尝试类似于 for i in ./*foo*; do mv "$i" "${i//foo/bar}";done 的东西,但不确定它是否有效。 - Chirag Rupani
你能提供其他不使用rename命令的替代方案吗? - Chirag Rupani
3
您提供的一行代码应该是有效的。尝试使用for f in *foo*; do echo mv "${i}" "${i//foo/bar}"; done来查看它将要执行的操作。如果要真正执行,请删除echo - cha0site

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接