尝试在Linux服务器上重命名一系列文件。查找我想要的文件很容易:

find . -type f -wholename \*.mbox

当然,作为mbox文件,其中一些名称中包含空格,因此它变为:
find . -type f -wholename \*.mbox -print0

我正在传递给xargs,以便可以重命名文件:
find . -type f -wholename \*.mbox -print0 | xargs -0 -I{} echo ${"{}"/.mbox/}

给定INBOX.mbox,回显应返回类似于INBOX的内容,但是bash抱怨:
bash: ${"{}"/.mbox/}: bad substitution

我怎样才能解决这个问题?如果可能的话,我想尝试将其保留在find/xargs解决方案中,以免在它周围添加很多循环构造。

最佳答案

尝试

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

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

10-07 19:46