在Unix中,如何删除当前目录及其下方的所有内容?

Yen*_*Yen 108 unix directory bash subdirectory delete-directory

我知道这会删除子目录中及其下面的所有内容:

rm -rf <subdir-name>
Run Code Online (Sandbox Code Playgroud)

但是如何删除当前目录中的所有内容以及它下面的每个子目录以及所有这些子目录的内容?

tva*_*son 166

练习安全计算.只需在层次结构中向上一级,不要使用通配符表达式:

cd ..; rm -rf -- <dir-to-remove>
Run Code Online (Sandbox Code Playgroud)

两个破折号--告诉rm<dir-to-remove>不是一个命令行选项,甚至当它一开始就冲刺.

  • 因为您专门匹配命名目录,因此不太可能删除您不想删除的内容. (34认同)
  • 它不会删除目录本身吗?之后你必须做mkdir <dir-to-remove>.但是之后引用该目录的任何硬链接都将是一个不同的目录. (25认同)
  • 为什么这样更安全? (8认同)
  • 真正.我可以看到自己很容易做到这一点. (5认同)
  • @Yen,如果你使用`rm./`你可能会不小心输入`rm./`这可能是灾难. (5认同)
  • 嗯...我以为他想删除当前目录中的所有内容,但不是目录本身...我们该怎么做? (2认同)

Joh*_*itb 43

将删除当前文件/目录下的所有文件/目录.

find -mindepth 1 -delete
Run Code Online (Sandbox Code Playgroud)

如果你想对你的名字的另一个目录做同样的事情,你可以命名

find <name-of-directory> -mindepth 1 -delete
Run Code Online (Sandbox Code Playgroud)

如果您不仅要删除它的子目录和文件,还要删除目录本身,请省略-mindepth 1.无需-delete获取将要删除的内容列表.


Vil*_*ari 40

我总是做的是打字

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

然后打ESC-*,和bash将扩大*在当前工作目录中的文件和目录的显式列表.

好处是:

  • 我可以在点击ENTER之前查看要删除的文件列表.
  • 命令历史记录将不包含带有通配符的"rm -rf*",然后可能会在错误的时间意外地在错误的位置重复使用.相反,命令历史记录中将包含实际的文件名.
  • 一次或两次回答"等一下......我刚刚删除哪些文件?"也变得很方便.文件名在终端回滚缓冲区或命令历史记录中可见.

事实上,我非常喜欢这个,所以我把它作为TAB的默认行为,在.bashrc中使用了这一行:

bind TAB:insert-completions
Run Code Online (Sandbox Code Playgroud)

  • +1仅适用于ESC-*扩展,这对我来说是新的. (19认同)

dir*_*tly 21

使用

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

更新:.代表当前目录,但我们不能使用它.该命令似乎有明确的检查....请改用通配符globbing.但这可能有风险.

一个更安全的版本IMO将使用:

rm -ri * 
Run Code Online (Sandbox Code Playgroud)

(这会在删除每个文件/目录之前提示您进行确认.)

  • "可能有风险"是非常简洁的. (12认同)
  • 在做这样的事情时,我发现了一个快速的ls -r.首先让你看看你要删除的内容.有用的是快速了解你不会删除整个磁盘...... (5认同)
  • 为什么它比rm -rf <subdir-name>风险更高? (2认同)
  • @Yen - 因为如果你在错误的地方做,你可能会得到灾难性的结果.如果在那里存在相同的子目录,则在错误的位置使用特定名称只会出错. (2认同)

Pie*_*ard 6

它是正确的,rm –rf .将直接删除当前的所有内容,包括任何子目录及其内容.的单点(.)指当前目录.小心不要这样做,rm -rf ..因为双点(..)表示上一个目录.

这就是说,如果你像我一样并且同时打开多个终端窗口,你最好是安全的并且使用rm -ir .让我们看一下命令参数来理解原因.

首先,如果你看一下rm命令手册页(man rm在大多数Unix下)你会注意到这–r意味着"以递归方式删除目录的内容".因此,rm -r .单独执行将删除当前目录中的所有内容以及所有内容.

rm –rf .添加的-f中表示"忽略不存在的文件,从不提示".该命令删除当前目录中的所有文件和目录,并且从不提示您确认是否确实要这样做.-f如果您在特权用户下运行该命令,则特别危险,因为您可以删除任何目录的内容,而无法确保它真正符合您的要求.

在otherhand,在rm -ri .-i替换的-f意思是"任何拆除前提示".这意味着在rm愉快地删除所有文件之前,你将有机会说"oups!这不是我想要的".

在我早期的系统管理员时代,我rm -rf /使用完全权限(root)登录系统.结果是两天后从备份恢复系统.这就是我现在就雇用的原因rm -ri.


nka*_*sis 5

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

不要这样做!这很危险!请确认你是在正确的目录!


小智 5

怎么样:

rm -rf "$(pwd -P)"/* 
Run Code Online (Sandbox Code Playgroud)

  • jQuery是如此强大. (27认同)