首页 文章

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

提问于
浏览
0

我想使用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'{}';

要么

对于f in .//.ctl;做mv“$ f”“$ {f / * .ctl / name .ctl}”; DONE

要么

for f in $(find . -type f -name'* .ctl');做mv $ f $(echo“$ f”| sed's / * .ctl / name.ctl /'); DONE

你能帮我用bash吗?

谢谢

2 回答

  • 1

    您可以使用以下一行执行此操作:

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

    x 只允许文件名是位置字符1而不是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 将执行重命名 . 如果're sure that you' ll名称中没有空格,则可以删除引号 .

相关问题