重命名目录和子目录Linux中的所有文件

时间:2015-02-15 13:32:19

标签: linux mv

我在其他问题中多次搜索过,但我没有找到答案,

我需要重命名文件夹中的部分文件名以及该文件夹中的所有子目录。

我找到了正确的CMD,但它只适用于当前目录中的文件,我如何使用它来重命名所有子目录中的fiels?

for filename in *mohsen*; do echo mv \"$filename\" \"${filename//mohsen/bar}\"; done | /bin/bash

感谢你

1 个答案:

答案 0 :(得分:2)

您可以使用mmv之类的工具来实现这一目标,或者使用pythonpy更现代,更好的方式:

% find -regex '.*mohsen.*' | py -x '"mv `{}` `{}`".format(x,re.sub("mohsen", "foo", x)' | sh

正如你所说你不能使用python(WTF?!?!?),这是另一种选择:

类似的东西:

for filename in $(find -regex '.*mohsen.*'); do echo mv \"$filename\" \"${filename//mohsen/bar}\"; done | /bin/bash

但是对于包含空格的文件会失败,因此您可能需要使用:

OLDIFS="$IFS" IFS=$'\n' for filename in $(find -regex '.*mohsen.*'); do echo mv \"$filename\" \"${filename//mohsen/bar}\"; done | /bin/bash; IFS="$OLDIFS"

为了将行分隔符设置为仅回车而不是空格。要注意这是一个丑陋的非推荐选项,这对于"一次"使用,但不要在脚本中使用它。

此外,一旦您对使用" echo"输出感到满意在我给出的命令中,删除回声并运行它。