如何从
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
据我所知,正确但不简单.
>找-delete
找到dirname -delete
AFAIK更正当前目录,但与指定目录一起使用也将删除该目录.
> find -mindepth 1 -delete
找到dirname -mindeph 1 -delete
AFAIK正确,但这是最简单的方法吗?
解决方法
rm -fr *.*
至少GNU rm可以正常工作,因为它有特殊的代码来排除“.”和“……”
至少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手册页说“尝试删除文件/,.或..是一个错误”,所以如果指定强制标志来忽略错误,它也可能在那里工作.