重命名多个子目录中的文件

Rename files in several subdirectories

我想使用 bash 脚本重命名存在于多个子目录中的文件。

我的文件在文件夹中:

./FolderA/ABCD/ABCD_Something.ctl

./FolderA/EFGH/EFGH_Something.ctl

./FolderA/WXYZ/WXYZ_Something.ctl

我想重命名所有同名的 .ctl 文件 (name.ctl)。

我尝试了几个使用 mv 或重命名的命令,但都没有用。

从文件夹 A 工作:

find . -name '*.ctl' -exec rename *.ctl name.ctl '{}' \;

for f in ./*/*.ctl; do mv "$f" "${f/*.ctl/name .ctl}"; done

for f in $(find . -type f -name '*.ctl'); do mv $f $(echo "$f" | sed 's/*.ctl/name.ctl/'); done

你能帮我使用 bash 吗?

谢谢

试试这个:

find . -name '*.ctl' | while read f; do
    dn=$(dirname "${f}")
    # remove the echo after you sanity check the output
    echo mv "${f}" "${dn}/name.ctl"
done

find 应该得到你想要的所有文件,dirname 只会得到目录名,mv 会执行重命名。如果您确定名称中永远不会有空格,则可以删除引号。

您可以用一行代码完成此操作:

find . -name *.ctl -exec sh -c 'mv "" `dirname ""`/name.ctl' x {} \;

x 只允许文件名是位置字符 1 而不是 0,这(在我看来)用作参数是错误的。