重命名一系列文件

Gle*_*rry 2 linux file find xargs

试图在linux服务器上重命名一系列文件.找到我想要的文件很简单:

find . -type f -wholename \*.mbox
Run Code Online (Sandbox Code Playgroud)

当然,作为mbox文件,其中一些在名称中有空格,因此它变为:

find . -type f -wholename \*.mbox -print0
Run Code Online (Sandbox Code Playgroud)

我正在管道到xargs,以便我可以重命名文件:

find . -type f -wholename \*.mbox -print0 | xargs -0 -I{} echo ${"{}"/.mbox/}
Run Code Online (Sandbox Code Playgroud)

在给出INBOX.mbox的情况下,回声应该返回类似INBOX的东西,然而,bash抱怨:

bash: ${"{}"/.mbox/}: bad substitution
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?如果可能的话,我想尝试将它保存在find/xargs解决方案中,这样我就不会在它周围添加很多循环结构.

hlo*_*dal 8

尝试

find . -type f -wholename \*.mbox | sed 's/\(.*\)\.mbox/mv "\1.mbox" "\1"/' | sh
Run Code Online (Sandbox Code Playgroud)

如果某些文件包含双引号字符,这不是100%的傻瓜证明,但我认为你可以忽略它:)