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

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

如何简单地从 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
    据我所知,对于当前目录来说是正确的,但与指定目录一起使用也会删除该目录。

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

答案1

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 ..
$

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

FreeBSD rm 手册页说“尝试删除文件 /、. 或 ..”是错误的,所以如果您指定强制标志来忽略错误,它可能也会在那里起作用。

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

答案2

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

#for dir foo with /home/kbrandt/foo
rm -rf /home/kbrandt/foo && mkdir /home/kbrandt/foo

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

答案3

 rm -rf directory

它将有效地摧毁一切,包括目录本身。

答案4

这是对我有用的东西:

zip -rm foo *
rm foo.zip

这可能不是最有效的方法,但它确实有效。

相关内容