如何简单地从 Linux 上当前或指定目录中删除所有内容?
几种方法:
rm -fr *
rm -fr dirname/*
不起作用——它会留下隐藏文件——以点开头的文件,以及当前目录中以破折号开头的文件,并且无法处理太多文件rm -fr -- *
rm -fr -- dirname/*
不起作用 — 它会留下隐藏文件,并且无法处理太多文件rm -fr -- * .*
rm -fr -- dirname/* dirname/.*
不要尝试这个— 它还将删除父目录,因为“..”也以“.”开头。rm -fr * .??*
rm -fr dirname/* dirname/.??*
不起作用 — 它会留下“.a”、“.b”等文件,并且无法处理太多文件find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -fr
find dirname -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -fr
据我所知,正确但并不简单。find -delete
find dirname -delete
据我所知,对于当前目录来说是正确的,但与指定目录一起使用也会删除该目录。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 手册页说“尝试删除文件 /、. 或 ..”是错误的,所以如果您指定强制标志来忽略错误,它可能也会在那里起作用。
答案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
这可能不是最有效的方法,但它确实有效。