PKM*_*PKM 26 command-line delete files rm
假设我有一个这样的目录树:
FOLDER:
file1
file2
file3
Subfolder1:
file1
file2
Subfolder2:
file1
file2
Run Code Online (Sandbox Code Playgroud)
如果我使用rm -r FOLDER/*,FOLDER 中的所有内容都将被删除,包括子目录。如何在不删除实际目录的情况下删除 FOLDER 及其子目录中的所有文件?
Ser*_*nyy 41
您要做的是递归删除。为此,您需要一个递归工具,例如find.
find FOLDER -type f -delete
Run Code Online (Sandbox Code Playgroud)
hee*_*ayl 13
与bash:
shopt -s globstar ## Enables recursive globbing
for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done
Run Code Online (Sandbox Code Playgroud)
这里迭代 glob 扩展的文件名,并仅删除文件。
以上是试运行,如果对要进行的更改感到满意,请删除echo以进行实际删除:
for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done
Run Code Online (Sandbox Code Playgroud)
最后,取消设置globstar:
shopt -u globstar
Run Code Online (Sandbox Code Playgroud)
使用zsh,利用 glob 限定符:
echo -- FOLDER/**/*(.)
Run Code Online (Sandbox Code Playgroud)
(.) 是 glob 限定符,它将 glob 扩展限制为仅常规文件。
以上将只打印文件名,用于实际删除:
rm -- FOLDER/**/*(.)
Run Code Online (Sandbox Code Playgroud)
小智 11
如果您的版本find不支持,-delete您可以使用以下命令删除当前目录及以下的每个文件。
find . ! -type d -exec rm '{}' \;
Run Code Online (Sandbox Code Playgroud)