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

Bash 重命名多个子目录中的文件,bash,file-rename,mv,Bash,File Rename,Mv,我想使用bash脚本重命名存在于多个子目录中的文件 我的文件位于以下文件夹中: /FolderA/ABCD/ABCD\u某物 /FolderA/EFGH/EFGH\u Something.ctl ./FolderA/WXYZ/WXYZ_Something.ctl 我想用相同的名称(name.ctl)重命名所有.ctl文件 我尝试了几个命令使用mv或重命名,但没有工作 在FolderA工作: 找到-名称'*.ctl'-exec rename.*.ctl name.ctl'{}'\ 或 对于f in

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

我的文件位于以下文件夹中:

/FolderA/ABCD/ABCD\u某物

/FolderA/EFGH/EFGH\u Something.ctl

./FolderA/WXYZ/WXYZ_Something.ctl

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

我尝试了几个命令使用mv或重命名,但没有工作

在FolderA工作:

找到-名称'*.ctl'-exec rename.*.ctl name.ctl'{}'\

对于f in./*/*.ctl;执行mv“$f”“${f/*.ctl/name.ctl}”;完成

对于美元中的f(find.-type f-name'*.ctl');do mv$f$(echo“$f”| sed's/*.ctl/name.ctl/”);完成

你能帮我用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' | 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 "$1" `dirname "$1"`/name.ctl' x {} \;

x
只允许文件名是位置字符1,而不是0(我认为)错误地将其用作参数。

您可以使用一行:

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

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

这是正确的答案。。但人们会抱怨没有对发现的输出进行迭代P我保证。谢谢,我也试过了,但奇怪的是,我被拒绝了“创建”常规文件名.ctl的消息权限?这是正确的答案。。但人们会抱怨没有对发现的输出进行迭代P我保证。谢谢,我也试过了,但奇怪的是,“创建”常规文件名.ctl的消息权限被拒绝了?