如何删除除文件夹以外的所有文件?

5
我曾试图寻找一种方法来删除工作目录中除子目录外的所有文件,但未能成功。
我找到了一种删除所有目录中所有文件的方法,但是我正在寻找一种只删除当前“层级”上的文件的方法。
2个回答

12
find . -maxdepth 1 -type f -print0 | xargs -0 rm

find命令可以递归地搜索目录中与指定表达式匹配的文件和文件夹。

  • -maxdepth 1将仅搜索当前级别(与.一起使用时或使用目录代替时的顶级),有效地关闭递归搜索功能
  • -type f指定只搜索文件,所有文件都包括在内

@chepner建议改进上述内容,简单地使用:

find . -maxdepth 1 -type f -delete

不确定为什么我一开始没想到,但无论如何。


1
如果可以使用-print0,那么很可能也可以使用-delete - chepner
1
这很棒且功能多样,尽管我收到了以下输出:find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.rm: missing operand Try `rm --help' for more information. 文件夹中的所有文件都被删除了。 - Tango_Chaser
1
只需交换参数即可,find 命令需要 -maxdepth 参数……实际上是第二个参数,在 -type 参数之前。 - KurzedMetal
2
find . -maxdepth 1 -type f -delete >> 工作完美。谢谢! - Tango_Chaser

6
我认为这很简单:
$ rm *

当在工作目录内时。

我已经测试过了,并且它起作用了——它会删除工作目录中的所有文件并不会影响任何子目录中的文件。

请记住,如果您想删除隐藏文件,那么需要:

$ rm * .*

@IKavanagh,但它仍然成功删除了所有文件。无论如何感谢您指出这一点! - Mateusz Piotrowski
1
在脚本中,你怎么知道文件是否已经成功删除了呢? - IKavanagh
@IKavanagh,你说得完全正确。你的答案比我的好多了。不过对于日常使用,我会选择 rm * - Mateusz Piotrowski
1
谢谢,它运行得很好,除了文件夹上的错误消息 - 但它可以完成任务。 - Tango_Chaser

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