如何简单地从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
    AFAIK对于当前目录是正确的,但是与指定的目录一起使用也会删除那个目录。

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

rm -fr * .*
因为它有特殊的代码来排除“”,所以至less能用于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手册页说:“试图删除files /,。或..”是错误的,所以如果你指定force标志来忽略错误,那么它也可能在那里工作。

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

要添加到你的列表中,可以说你想删除目录foo和所有子目录中的所有东西(这是你的find命令的作用)。 我总觉得最简单的是:

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

如果你不想删除子目录,修改你的find命令来包含-type f

  rm -rf directory 

它会有效地杀死所有的东西,包括目录本身。

为什么不简单

 ls -la <selected dir>| xargs rm -Rf 

它会产生“。”的错误。 &“..”但它会放下一切。

这是一些对我来说很有用的东西:

 zip -rm foo * rm foo.zip 

它可能不是最有效的方法,但它的工作。