我试图将文件夹或子树中与通配符匹配的所有文件清零(截断)。另一篇帖子建议使用find … -exec
上述方法,该方法获得了很高的评价。然而,当我尝试该方法时,我无法让它对名称中带有空格的文件起作用。for variable in wildcard
find … -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"' - {} \;
在其中告诉find
shell 执行一个命令,然后使用 来-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
如果需要,请创建一个脚本来调用。