是否有命令可以删除目录中的所有文件和子目录没有删除目录?
例如,如果我有一个dontDeleteMe
带有子目录的目录1
,2
并且3
每个子目录中都有几张图片,我怎样才能删除子目录1
、2
和3
以及它们中的所有文件,而不删除父目录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++ Alt)T并输入以下命令:
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/*