在 unix 上清理当前目录 rm -r *

4 linux shell

这是清理当前目录的正确方法吗?

rm -r * .
Run Code Online (Sandbox Code Playgroud)

小智 6

不,并且有几个原因:1)该命令将尝试删除.当前目录,因此会失败;2) 该命令不会删除以“.”开头的“隐藏”文件 特点; 3) 该命令不会删除目录。

你可以使用rm -rf *. 这将删除所有文件和目录,但不会删除点文件。您可以使用find . -type f | xargs rm删除包括隐藏文件在内的所有文件,但这不会删除目录。

所以,你可以使用这个:

$ find . -print0 -type f -o -type d -not -name '\.' | xargs -0 rm -rf
Run Code Online (Sandbox Code Playgroud)

在这里,您递归地查找所有文件和目录(只要它们不被称为“.”),然后将其删除。在-print0-0参数允许它正确地处理文件名在其名称中的空白。

  • 此代码不会删除所有项目。想想一个名称中带有空格的项目。所以最好将 `-print0` 与 `find` 一起使用,将 `-0` 与 `xargs` 一起使用。 (2认同)

Mar*_*sey 5

我通常只是在层次结构中向上移动一级,然后按名称删除目录并重新创建它:

cd ..
rm -rf dirname
mkdir dirname
cd dirname
Run Code Online (Sandbox Code Playgroud)

因为这消除了rm -rf *在错误目录中使用的错误情况。

注意:如果目录具有非标准权限或由其他帐户拥有,则在删除并重新创建目录时将丢失该目录。这对我来说不是经常出现的事情,但值得思考。

如果我需要在脚本中执行此操作,我可能会创建一个函数来保存当前目录,向上移动一个级别,删除并创建新的空目录,然后移动到那里。