将文件夹中文件名含有空格的文件清零

将文件夹中文件名含有空格的文件清零

我试图将文件夹或子树中与通配符匹配的所有文件清零(截断)。另一篇帖子建议使用find … -exec上述方法,该方法获得了很高的评价。然而,当我尝试该方法时,我无法让它对名称中带有空格的文件起作用。for variable in wildcardfind … -exec

尝试了两种方法:

for方法(作品):

for x in *.wav; do echo -n "" > "$x"; done

find方法(需要帮助):

find . -type f -iname \*.wav -exec > "{}" \;

得出

find: invalid argument `;' to `-exec'

{}并创建一个名为零字节的文件。

请注意,替换> "{}"echo {}会打印文件夹中的文件列表,因此语法很接近。只需弄清楚如何缓解文件名有空格的错误。

答案1

您的命令的问题find在于它希望-exec处理>,但find … -exec只处理简单命令。只有 shell 知道如何解释>。(好吧,可能有一两个其他程序可以这样做,但find不是其中之一。)

如果你想要接近你所得到的东西,使用

find . -type f -iname "*.wav" -exec sh -c '> "$1"' - {} \;

在其中告诉findshell 执行一个命令,然后使用 来-c告诉 shell 执行一个C命令由>和 文件名组成。我建议你做一些更简单的事情:

find . -type f -iname "*.wav" -exec cp /dev/null {} \;

答案2

您不需要引用{}构造find -exec

find . -type f -name '* *' -exec ls {} \;

您不能>在 中使用find -exec,它只需要命令和参数。find -exec如果需要,请创建一个脚本来调用。

相关内容