删除所有文件但不删除目录的命令是什么?
假设我有一个这样的目录树:
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 '{}' \;