重命名目录和子目录中的所有文件 Linux
Rename All Files in directory and subdirectories Linux
我在其他问题中搜索了很多次,但没有找到答案,
我需要重命名文件夹中的部分文件名以及该文件夹中的所有子目录。
我找到了正确的 CMD,但它只适用于当前目录中的文件,我如何将它用于重命名所有子目录中的文件?
for filename in *mohsen*; do echo mv \"$filename\" \"${filename//mohsen/bar}\"; done | /bin/bash
谢谢你
您可以使用 mmv
to achieve that, or a more modern, nicer way would be to use 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"
为了仅将行定界符设置为回车 return 而不是空格。请注意,这是一个丑陋的不推荐选项,它适合 "one time" 使用,但不要在脚本中使用它。
此外,一旦您对我给出的命令中使用 "echo" 的输出感到满意,请删除 echo 并 运行 它。
我在其他问题中搜索了很多次,但没有找到答案,
我需要重命名文件夹中的部分文件名以及该文件夹中的所有子目录。
我找到了正确的 CMD,但它只适用于当前目录中的文件,我如何将它用于重命名所有子目录中的文件?
for filename in *mohsen*; do echo mv \"$filename\" \"${filename//mohsen/bar}\"; done | /bin/bash
谢谢你
您可以使用 mmv
to achieve that, or a more modern, nicer way would be to use 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"
为了仅将行定界符设置为回车 return 而不是空格。请注意,这是一个丑陋的不推荐选项,它适合 "one time" 使用,但不要在脚本中使用它。
此外,一旦您对我给出的命令中使用 "echo" 的输出感到满意,请删除 echo 并 运行 它。