我想使用bash脚本重命名几个子目录中的文件。
我的文件在文件夹中:
./ FolderA / ABCD / ABCD_Something.ctl
./ FolderA / EFGH / EFGH_Something.ctl
./ FolderA / WXYZ / WXYZ_Something.ctl
我想重命名所有名称相同的.ctl文件(name.ctl)。
我使用mv或重命名尝试了几个命令,但没有用。
在FolderA工作:
找到。 -name'* .ctl'-exec rename * .ctl name.ctl'{}'\;
或
for f in ./*/*.ctl;做mv“$ f”“$ {f / * .ctl / name .ctl}”;完成
或
for f in $(find。-type f -name'* .ctl');做mv $ f $(echo“$ f”| sed's / * .ctl / name.ctl /');完成
你能帮我使用bash吗?
感谢
答案 0 :(得分:1)
试试这个:
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
将执行重命名。如果您确定名称中永远不会有空格,则可以删除引号。
答案 1 :(得分:1)
您可以使用以下一行执行此操作:
find . -name *.ctl -exec sh -c 'mv "$1" `dirname "$1"`/name.ctl' x {} \;
x
只允许文件名为位置字符1而不是0(我认为)错误地用作参数。