Answers:
要删除一切在一个目录不删除的目录,键入:
rm -rfv dontDeleteMe/*
请注意,该/*
部分非常重要。如果在之前放置一个空格*
,它将删除当前目录中的所有文件。
此外,非常小心玩耍rm
,-r
并且*
都在同一个命令。它们可能是灾难性的组合。
更新: 好的,我意识到,如果您确实有隐藏/点文件[文件名开头带有点,例如.hidden
],那么这些文件将保持完整。
所以真的,到了最简单的解决原来的问题是:
rm -rfv dontDeleteMe && mkdir dontDeleteMe
另一个可能是使用find
的-exec
选项或管道xargs
(如下):
find dontDeleteMe/* -print0 | xargs -0 rm -rv
find dontDeleteMe/* -print0 | xargs -0 rm -rv
我相信在大多数情况下,无论空格如何,这都行得通。但是cd到/tmp/
并创建一个测试目录,然后尝试一下。:)
rm -rf dontDeleteMe && mkdir dontDeleteMe
无法确保使用相同的权限/所有者重新创建目录。而是,使用find dontDeleteMe/ -mindepth 1 -delete
以下变体之一。
打开终端(Ctrl+ Alt+ T)ant键入:
find somedir -mindepth 1 -delete
这将匹配其中的所有文件和目录somedir
及其(大)子项,包括“隐藏”的点文件,但somedir
由于会排除自身-mindepth 1
,然后是-delete
它们。
find /dontDeleteMe/ -xdev -depth -mindepth 1 -exec rm -Rf {} \;
使用xdev
选项仅在设备边界内删除文件。
-delete
。它暗示着-depth
并且比它容易记住-depth -exec rm -Rf {} \;
要删除(在终端中)除名为“ dontdelete”的基本目录以外的所有文件和子目录:
rm -rf dontdelete/*
您可以将find
其与-delete
标志一起使用:
find dontDeleteMe/* -delete
,这/*
很重要,因为它告诉find
您仅在INSIDE文件夹内搜索“ dontDeleteMe”。
还要确保该-delete
标志位于find
命令的末尾。
dotglob
。否则,使用-mindepth 1
标志选项似乎是使其正常工作的唯一方法。
rm -rf directory/{.*,/*}
怎么说:
删除所有以开头的文件。在“目录”和所有其他文件中。
尽管Neftas指出,这种解决方案并不安全!
更安全的解决方案是:
rm -rf directory/!(.|..)
.
和..
目录。更改{.*}
为可以避免这种情况{.??*}
,但是您不会删除只有一个字符的隐藏文件,例如.a
。
有一个更简单的答案:
cd dontDeleteMe
rm -rf *
基本的系统管理讲课时间:使用像这样的清扫命令时,请务必注意您所处的位置。
我不能这么说。我不得不找回一个盒子,因为有人没有注意并rm -rf *
在/时输入。
* nix假设,如果您是root用户或以root用户身份sudo-ing,您就知道自己在做什么。因此,在执行操作之前,请确保您知道自己在做什么。
确保在发出“ rm”之前您的“ cd”命令可以工作的另一种方法是使用
cd dontDeleteMe && rm -rf *
cd dontDeleteMe && rm -rf *
&&
操作员不只是将命令链接在一起;而是将它们链接在一起。它要求每个命令都必须成功,然后才能执行下一个命令。如果cd
命令由于任何原因而失败(目录不存在,特权等),则该rm
命令将不会执行。我会说更安全。
rm -rf *
无论如何都要运行。