‘rm -r~’对我的主目录做了什么?
gedit创建以’〜’结尾的隐藏备份文件。 我想对目录树进行递归清理。
命令rm *~
将删除所有以’〜’结尾的本地文件
我以为rm -r *~ .
会删除整棵树中的所有文件,但我输错了rm -r ~
。
有一条消息,某些目录无法删除,我退出命令。 问题是:我删除了什么?
我注意到我的Filezilla配置已经消失了。 此命令是否从主目录中删除所有隐藏目录?
您已删除(几乎)所有主目录!
rm -r something
递归方式删除rm -r something
文件和目录; 它只会在没有删除权限的项目上失败,因为它们由不同的用户(例如root
)拥有,或者因为它们正在使用(例如GVFS挂载)。
如果你没有添加-f
(如in, rm -rf something
),你会得到类似的东西:
rm: remove write-protected regular file 'something'? rm: descend into write-protected directory 'something'?
此时你可以中止,然后你可能会意识到你执行了错误的命令。
社区建议如何避免此类事故
注意:社区维基,大家请随时贡献。
-
对于一些文件,使用
-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
-
如果从当前目录中删除,请以
./
作为前缀,以避免错误地删除其他位置:$ 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
find | grep example
,它给了我这20个文件。 这看起来不错,所以我现在通过xargs
删除那些确切的文件,以及前面提到的rm -v
详细输出:找到| grep示例| xargs rm -v
这给了我这个输出。 这样的预览可以防止出现问题,例如,您输入拼写错误并输入
sample
而不是example
。
-
如果您的文件名可能包含空格,制表符,换行符或引号( "
或'
),则不应使用上述解决方案,因为这会导致xargs
失败,或者使用不完整的文件名提供rm
,这在最坏的情况下可能会结束删除错误的文件。执行上述操作的安全方法是使用find
的操作符和操作完成所有操作。
以下将显示包含单词example
所有文件
find . -name "*example*"
如果该列表是您要删除的文件,请使用-exec
操作将文件传递给rm
。
find . -name "*example*" -exec rm -v {} +
有关使用find的更多帮助,请参阅使用Find 。
是。 作为单独参数的不带引号的波浪号角色会扩展到您的homedir。 所以rm -r ~
扩展到rm -r /home/yourusename
。 所以你告诉rm以递归方式删除homedir中的所有文件。
有关波浪线扩展如何工作的更多信息,请参见http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion 。