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

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

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

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

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

答案1

您要尝试执行的是递归删除。为此,您需要一个递归工具,例如find

find FOLDER -type f -delete

答案2

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

利用zshglob 限定符:

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

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

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

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

答案3

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

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

相关内容