如何在不删除 bash 中的目录的情况下删除目录中的所有文件和子目录?

如何在不删除 bash 中的目录的情况下删除目录中的所有文件和子目录?

是否有命令可以删除目录中的所有文件和子目录没有删除目录?

例如,如果我有一个dontDeleteMe带有子目录的目录12并且3每个子目录中都有几张图片,我怎样才能删除子目录123以及它们中的所有文件,而不删除父目录dontDeleteMe

答案1

删除所有内容目录但不删除该目录,输入:

rm -rfv dontDeleteMe/*

请注意,此/*部分非常重要。如果在 之前加了空格*,它将删除当前目录中的所有文件。

此外,在同一个命令中 使用rm-r和all 时要非常小心。它们可能是一个灾难性的组合。*

更新: 好的,我意识到如果你确实有隐藏/点文件 [文件名以点开头,例如.hidden] 那么这将使这些文件保持完整。

所以实际上,最简单的解决办法是原始问题是:

rm -rfv dontDeleteMe && mkdir dontDeleteMe

另一个方法是使用find-exec选项或管道xargs(如下):

find dontDeleteMe/* -print0  | xargs -0  rm -rv

答案2

打开终端(Ctrl++ AltT并输入以下命令:

find somedir -mindepth 1 -delete

这将匹配somedir其(孙)子级内的所有文件和目录,包括“隐藏”点文件,但somedir由于 而排除其自身-mindepth 1,然后是-delete它们。

答案3

并不总是有效的唯一原因rm -r ./*是您可能拥有不匹配的隐藏文件和/或文件夹*

为此,bash提供一个选项来*匹配所有内容,甚至是隐藏的对象:

cd dont-delete-me
shopt -s dotglob
rm -r ./*

dotglob如果你继续使用执行上述命令的 shell,则重置为默认(未设置)状态会很有用:

shopt -u dotglob 

答案4

要在终端中删除除名为“dontdelete”的基本目录之外的所有文件和子目录:

rm -rf dontdelete/*

相关内容