Tom*_*zky 4 linux command-line-interface
如何简单地从 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
AFAIK 对当前目录正确,但与指定目录一起使用也会删除该目录。
find -mindepth 1 -delete
find dirname -mindeph 1 -delete
AFAIK 正确,但这是最简单的方法吗?
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 标志来忽略错误,它也可能在那里工作。
要添加到您的列表中,假设您要删除目录 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
| 归档时间: |
|
| 查看次数: |
18777 次 |
| 最近记录: |