您已删除(几乎)所有主目录!
rm -r something
递归删除在/文件和目录的东西 ; 它只会在没有权限删除的项目上失败,这是因为它们由另一个用户拥有(例如root
),或者因为它们正在使用(例如GVFS挂载)。
如果您没有添加-f
(如中的rm -rf something
),则会得到以下内容:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
此时,您可以中止,然后您可能会意识到执行了错误的命令。
社区如何避免此类事故的建议
注意:社区Wiki,每个人都可以随时贡献。
对于一些文件,请使用-i
选项获得有关删除文件或目录的确认:
$ rm -ri something/
rm: remove regular file ‘something/file~’? y
rm: descend into directory ‘something’? y
rm: remove regular file ‘something/file’? y
rm: remove directory ‘something’? y
如果要从当前目录中删除,请在./
前面加上a ,以免误删除其他位置:
$ cd something
$ rm -v ./*~
removed ‘./file~’
以上是用于演示的使用./
。如果有子目录,当然也可以使用rm -v something/*~
。当心:不要以为会rm ./.*
删除当前目录中的所有隐藏文件。看到隐藏文件遍历的变通办法,此Serverfault问题。
移动而不是删除:首先不是习惯以递归方式删除文件,而是在最终删除它们之前,我习惯于将要摆脱的文件移动到其他地方。如果出了问题,很容易恢复。
mv -b SOURCE DEST
使用find
(可能与结合使用grep
)进行预览如果要递归删除选定的文件,。 您应该尝试使这种情况很少发生,但是如果您必须...
find
如果没有参数,则递归列出当前文件/目录下的所有文件/目录。您应该尝试查找man find
如何使其具有选择性(一个宝库),但是如果您不想打扰,可以使用熟悉grep
的过滤器来筛选要删除的文件。
- 假设我是uber-l33t内核黑客,并且被源代码树中几KB的“示例”文件所困扰。我想删除名称中包含该名称的所有文件。所以我输入
find | grep example
,这给了我这20个文件。 看起来不错,因此我现在通过以下命令删除那些确切的文件以及rm -v
前面提到的详细输出xargs
:
找到 grep示例| xargs rm -v
这给了我这个输出。 这样的预览可以防止出现问题,例如您输入错误并输入sample
而不是example
。
如果文件名包含空格,制表符,换行符或引号("
或'
),则不应使用上述解决方案,因为这将导致xargs
失败或rm
文件名不完整,这在最坏的情况下可能会导致错误的删除文件。执行上述操作的安全方法是使用find
的操作符和操作来完成所有操作。
下面将显示所有包含单词的文件 example
find . -name "*example*"
如果该列表是您要删除的文件,请使用该-exec
操作将文件传递给rm
。
find . -name "*example*" -exec rm -v {} +
有关使用的更多帮助,请参见使用查找find
。