重命名多个子目录中的文件
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,这(在我看来)用作参数是错误的。
我想使用 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,这(在我看来)用作参数是错误的。