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

时间:2008-12-16 23:30:31

标签: linux unix command-line

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

rm -rf ./*

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

13 个答案:

答案 0 :(得分:7)

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

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

alias rm="pwd;read;rm"

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

答案 1 :(得分:7)

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

答案 2 :(得分:5)

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

mv $ 1~ / .recycle /

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

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

答案 3 :(得分:5)

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

find . -maxdepth 1 \! -name . -print0 | xargs -0 rm -rf

它还将处理隐藏的文件和目录。点后不需要斜杠,这样也可以消除键入. /的可能事故。

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

即可
find . -maxdepth 1 \! -name . -print  | less

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

function enum_files { find . -maxdepth 1 \! -name . "$@"; }

现在你的删除是安全的:

enum_files | less                     # view the files
enum_files -print0 | xargs -0 rm -rf  # remove the files

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

答案 4 :(得分:3)

向上一级并输入目录名

rm -rf <dir>/*

答案 5 :(得分:3)

我使用以下其中一个:

rm -fr .

cd ..; rm -fr name-of-subdirectory

我很少附加到我想要删除内容的目录,但必须保留目录本身。

答案 6 :(得分:2)

使用rm -rf时,我几乎总是使用完全限定的路径。

答案 7 :(得分:1)

使用trash命令。在Debian / Ubuntu / etc中,它可以从包trash-cli安装。它适用于文件和目录(因为它实际上是移动文件,而不是立即删除它)。

trash实现freedesktop.org trash specification,与GNOME和KDE垃圾桶兼容。

可以使用同一个包中的restore-trash或通过常用的GUI取消删除文件。

答案 8 :(得分:0)

您可以随时打开-i,这会在每个文件上提示您,但对于大型目录而言,这将非常耗时。

我总是首先pwd

我甚至会创建一个别名,以便强制提示我的用户。我认为红帽默认是这样做的。

答案 9 :(得分:0)

您可以删除`f'开关,它应该提示您输入每个文件,以确保您确实要删除它。

答案 10 :(得分:0)

如果您要做的是吹走整个目录,那么该操作总会存在一定程度的危险。如果你真的想确定你做的是正确的事情,你可以随时对某个地方进行移动操作,比如/ tmp,等待一段时间,确保一切正常,并删除“删除”。然后进入/ tmp目录并仅使用相对路径进行强制和递归删除操作。另外,在移动中重命名为“delete-directoryname”,以便更容易出错。

例如,我想删除/ opt /文件夹,所以我这样做:

mv / opt / folder / tmp / delete-folder

....等待确保一切正常 - 也许一分钟,也许一周......

cd / tmp

PWD

rm -rf delete-folder /

执行rm -rf最重要的提示是始终使用相对路径。这使您无需在完成输入之前键入/。

答案 11 :(得分:0)

我有[tcsh]的原因:

alias clean  '\rm -i -- "#"* *~'
alias rmo    'rm -- *.o'

他们是在我第一次意外地在*和.o之间放置一个空格时创建的。我只想说,发生的事情不是我预期会发生的......

但事情本来可能更糟。回到90年代初,我的一个朋友有一个〜/ etc 目录。他想删除它。不幸的是,他键入了 rm -rf / etc 。不幸的是,他以root身份登录。他度过了糟糕的一天!


邪恶:触摸 - '-rf *'

为安全起见,请使用' - ' -i 。或者一次正确创建一个别名!

答案 12 :(得分:0)

这是我在macOS上使用的别名。在执行之前,它将要求每个rm命令。

# ~/.profile

function saferm() {
    echo rm "$@" 
    echo "" 
    read -p "* execute rm (y/n)? :  " yesorno

    if [ $yesorno == "y" ]; then
         /bin/rm "$@"
    fi
}

alias srm=saferm
alias rm=srm