清空目录中所有文件的Linux命令

24

我想清空一个目录中的所有文件。我已经尝试过以下方法:

find myFolderPath/* -exec cat /dev/null > {} ';'

但它不起作用。我该怎么做?

2个回答

44

find -exec中直接使用重定向符号(>)是不行的,因为它会在命令运行之前就执行并创建一个名为{}的文件。要解决这个问题,您需要在一个新的shell中使用sh -c

此外,请注意,您不需要使用cat /dev/null > file来覆盖一个文件。您可以简单地使用> file

尝试这个:

find . -type f -exec sh -c '>"{}"' \;

2
我发现使用 find . -type f -exec sh -c '>"{}"' ; 的效果更好。 - Smile4ever
由于一些带有特殊字符的文件名,出现了“sh:-c:line 0:syntax error near unexpected token `('”错误。已更改命令为find . -type f -exec sh -c '>"{}"' ;。 - Víctor
另一个改进,根据SC2156,命令应该变成类似于find . -type f -exec sh -c '>"$1"' shell {} \;,以防止文件名中的特殊字符作为脚本的一部分被执行。 - Oylex

15

这将实现您想要的功能:

for f in *; do >$f; done

我喜欢它,但是文件名中含有空格时它会出错。 - Brendan Cody-Kenny
1
如何以 sudo 权限运行此程序? - Bax
很棒的解决方案。值得注意的是:在执行此操作时,您要确保自己位于正确的文件夹中。它将在您当前所在的文件夹中执行所有文件。 - andromeda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接