我害怕有一天,我要在我目前使用的命令中放一个空格或错过一些东西:
rm -rf ./*
是否有更安全的方法清空当前目录的内容?
答案 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