删除所有文件但不删除目录的命令是什么?

假设我有一个这样的目录树:

FOLDER: file1 file2 file3 Subfolder1: file1 file2 Subfolder2: file1 file2 

如果我使用rm -r FOLDER/* ,FOLDER中的所有内容都将被删除,包括子目录。 如何在不删除实际目录的情况下删除FOLDER及其子目录中的所有文件?

你要做的是递归删除。 为此,您需要一个递归工具,例如find

 find FOLDER -type f -delete 

bash

 shopt -s globstar ## Enables recursive globbing for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done 

这里迭代了glob扩展的文件名,并只删除文件。

以上是干运行,如果对要进行的更改感到满意,请删除实际删除的echo

 for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done 

最后,取消设置globstar

 shopt -u globstar 

使用zsh ,利用glob限定符:

 echo -- FOLDER/**/*(.) 

(.)是glob限定符,它将glob扩展限制为常规文件。

以上只会打印文件名,以便实际删除:

 rm -- FOLDER/**/*(.) 

如果您的find版本不支持-delete您可以使用以下命令删除当前目录及下面的每个文件。

 find . ! -type d -exec rm '{}' \;