当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

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

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

如果我使用 rm -r 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 扩展的文件名,并仅删除文件。

上面是dry-run,如果对要进行的修改满意,则移除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 '{}' \;

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12323.html,未经允许,请勿转载。