在*nix中清空目录最安全的方法是什么?

Hat*_*es_ 6 unix linux command-line

我害怕有一天,我要在我目前使用的命令中放一个空格或错过一些东西:

rm -rf ./*
Run Code Online (Sandbox Code Playgroud)

清空当前目录的内容有更安全的方法吗?

Vin*_*vic 7

最安全的方法是在按Enter键之前先坐在你的手上.

除此之外,您可以创建一个像这样的别名(对于Bash)

alias rm="pwd;read;rm"

这将显示您的目录,等待输入按,然后使用正确的标记删除您指定的内容.您可以按^ C而不是Enter来取消.

  • 那太讨厌了; 它鼓励你假设你将获得rm命令的第二次机会.等到你搬到另一台机器或以其他用户身份登录,然后*bam*... (8认同)
  • 最好按照别名alias delete =“ ...” (2认同)

Rob*_*ble 7

这是一种更安全的方法:ls首先使用列出将受影响的文件,然后使用命令行历史记录或历史记录替换来更改lsto rm并在确信将对其进行操作后再次执行命令.


kri*_*ina 5

如果您想要非常安全,可以创建一个简单的别名或shell脚本,如:

mv $ 1~/.recycle /

这只会将你的东西移动到.recycle文件夹(你好,Windows!).

然后设置一个cron作业来对该文件夹中超过一周的东西做rm -rf.


Joh*_*itb 5

我认为这是一种合理的方式:

find . -maxdepth 1 \! -name . -print0 | xargs -0 rm -rf
Run Code Online (Sandbox Code Playgroud)

它还将处理隐藏的文件和目录.点后不需要斜线,这也将消除可能的打字事故. /.

现在,如果您担心它会删除什么,只需将其更改为

find . -maxdepth 1 \! -name . -print  | less
Run Code Online (Sandbox Code Playgroud)

看看清单.现在你可以把它放到一个函数中:

function enum_files { find . -maxdepth 1 \! -name . "$@"; }
Run Code Online (Sandbox Code Playgroud)

现在你的删除是安全的:

enum_files | less                     # view the files
enum_files -print0 | xargs -0 rm -rf  # remove the files
Run Code Online (Sandbox Code Playgroud)

如果您不习惯在文件名中嵌入换行符,则可以省略-print0-0参数.但我会使用它们,以防万一:)