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

时间:2018-03-20 17:54:42

标签: bash file-rename mv

我想使用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吗?

感谢

2 个答案:

答案 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(我认为)错误地用作参数。