如何简单地从 Linux 上的目录中删除所有内容

Tom*_*zky 4 linux command-line-interface

如何简单地从 Linux 上的当前或指定目录中删除所有内容?

几种方法:

  1. rm -fr *
    rm -fr dirname/*
    不起作用 - 它会留下隐藏文件 - 以点开头的文件,以及当前目录中以破折号开头的文件,并且不会处理太多文件

  2. rm -fr -- *
    rm -fr -- dirname/*
    不起作用 - 它会留下隐藏文件并且不会处理太多文件

  3. rm -fr -- * .*
    rm -fr -- dirname/* dirname/.*
    不要尝试这个——它还会删除一个父目录,因为“..”也以“.”开头。

  4. rm -fr * .??*
    rm -fr dirname/* dirname/.??*
    不起作用——它会留下“.a”、“.b”等文件,并且不会处理太多文件

  5. find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -fr
    find dirname -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -fr
    据我所知正确但不简单。

  6. find -delete
    find dirname -delete
    AFAIK 对当前目录正确,但与指定目录一起使用也会删除该目录。

  7. find -mindepth 1 -delete
    find dirname -mindeph 1 -delete
    AFAIK 正确,但这是最简单的方法吗?

Mat*_*man 8

rm -fr * .*
至少可以在 GNU rm 上正常工作,因为它有特殊的代码来排除“。” 和 ”..”

$ id
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
$ cd /tmp
$ mkdir rmtest
$ cd rmtest
$ touch .test
$ ls -la
total 8
drwxr-xr-x 2 nobody nogroup 4096 2009-08-19 15:37 .
drwxrwxrwt 7 root   root    4096 2009-08-19 15:37 ..
-rw-r--r-- 1 nobody nogroup    0 2009-08-19 15:37 .test
$ rm -rf .*
rm: cannot remove `.' or `..'
rm: cannot remove `.' or `..'
$ ls -la
total 8
drwxr-xr-x 2 nobody nogroup 4096 2009-08-19 15:37 .
drwxrwxrwt 7 root   root    4096 2009-08-19 15:37 ..
$
Run Code Online (Sandbox Code Playgroud)

http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/remove.c#n440

FreeBSD rm 手册页说“尝试删除文件 /、. 或 .. 是一个错误”,因此如果您指定 force 标志来忽略错误,它也可能在那里工作。

http://www.freebsd.org/cgi/man.cgi?query=rm&apropos=0&sektion=0&manpath=FreeBSD+7.2-RELEASE&format=html


Kyl*_*ndt 6

要添加到您的列表中,假设您要删除目录 foo 和所有子目录中的所有内容(这就是您的 find 命令所做的)。我总是发现最简单的是:

#for dir foo with /home/kbrandt/foo
rm -rf /home/kbrandt/foo && mkdir /home/kbrandt/foo
Run Code Online (Sandbox Code Playgroud)

如果您不想删除子目录,请修改您的 find 命令以包括 -type f