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

标签 linux mv

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

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

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

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/

相关文章:

linux - 包含文件路径的 Bash 变量

c++ - FileServer 可以避免高 CPU 使用率吗?

linux -/usr/bin/time 始终为平均驻留集大小提供 0

linux - 在查找和移动 Bash 脚本中包含具有相同名称的不同文件

Ubuntu mv 命令只复制了,但源文件仍然存在

bash - 如何在 BASH 中移动所有小于 5 字节的文件?

c - 在 C 中使用外部

Linux 读取串口表格 - fork workaround & 如何更改 EOL?

linux - 允许容器监听 80 端口的副作用

unix - 如何在UNIX ssh中将同一目录中的所有文件(一个文件除外)移动到该文件中