我在其他问题上找了很多遍都没找到答案,
我需要重命名文件夹中的一部分文件名和该文件夹中的所有子目录。
我找到了正确的命令,但它只适用于当前目录下的文件,我怎么能用它来重命名所有子目录下的文件呢?
for filename in *mohsen*; do echo mv \"$filename\" \"${filename//mohsen/bar}\"; done | /bin/bash
谢谢您
最佳答案
您可以使用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”的输出感到满意时,删除echo并运行它。
关于linux - 重命名Linux目录和子目录中的所有文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28526590/