Marc Asked: 2009-06-24 08:54:07 +0800 CST2009-06-24 08:54:07 +0800 CST 2009-06-24 08:54:07 +0800 CST Linux递归删除保留第一个目录 772 这里的第一个问题,我通常在 StackOverflow 上。 我需要删除目录的所有内容,而不是目录本身,因为我无权删除该实际目录。这看起来很简单,但我找不到这个命令。提前致谢。 linux directory recursive 8 个回答 Voted Best Answer David Spillett 2009-06-24T08:57:09+08:002009-06-24T08:57:09+08:00 rm -r /path/to/directory/* 或者 rm -rv /path/to/directory/* 如果你想看看发生了什么。 chris 2009-06-26T06:31:39+08:002009-06-26T06:31:39+08:00 混乱-您担心 rm 将永远删除 .. 我进行了快速搜索,并在http://plan9.bell-labs.com/7thEdMan/vol1/man1.bun的第 7 版 unix 手册中找到了 rm 的手册页,其中说: 诊断 Generally self-explanatory. It is forbidden to remove the file .. merely to avoid the antisocial consequences of inadvertently doing something like rm -r . 鉴于第 7 版 unix 是所有现代 unix 的父级,并于 1979 年发布,我会说这是一件非常安全的事情。它不会做任何事情,但不会造成任何伤害。 现在,像 chown 这样的其他程序会很高兴地“下降”到 .. 如果你做一些古怪的事情,比如“chown -Rh user .*”,但 rm 不是 chown,会导致各种混乱。 chaos 2009-06-24T09:59:52+08:002009-06-24T09:59:52+08:00 如果当前目录可以使用,则为简易版本: find . ! \( -name . \) -print0 | xargs -0 rm -rf 如果当前目录不好,则更难的版本: find /some/dir ! \( -samefile /some/dir \) -print0 | xargs -0 rm -rf Yordan 2009-06-24T08:57:44+08:002009-06-24T08:57:44+08:00 查找 /path/dir/ -type f -print|xargs rm chris 2009-06-24T09:23:32+08:002009-06-24T09:23:32+08:00 这是 unix 的黑暗区域之一,可以快速变得粘稠。 上面的每个例子都解决了 unix 中一个长期存在的错误,现在人们只是把它看作是一个可爱的小个性怪癖。 寻找 。| xargs rm 如果目录中有古怪的文件名(如换行符或空格),则不起作用。如果文件名带有 ;,您甚至可以开始删除不在目录中的其他文件。在里面。谁知道如果文件名中带有 ` 会发生什么。问问小鲍比桌子就行了。事情很快就会变得令人兴奋。 Bill Weiss 的评论正确地指出,如果您在 find 中使用 -print0 并在 xargs 中使用 -0,则现代版本的 find 和 xargs 正确使用 null 作为 find 找到的每个事物的字段分隔符。我不是一个值得信赖的人,并且对旧的、随机损坏的 unix 版本有所了解,我倾向于对这些新奇的 gnuisms 保持警惕,即使它们工作得很好,并且在这种情况下是这个特定问题的正确答案。 如果您在该目录中有 10,000 个文件,则 rm -r /path/to/directory/* 将不起作用。 现在 - 大多数情况下我只是懒得做这件事,所以我将使用 rm -rf 并查看错误是否有错误。如果我 100% 确定没有古怪的文件,我可能会使用 find 和 xargs,尽管我并不真正相信它们。 如果我在自动运行的脚本中执行此操作,并且我不知道这将使用多长时间或谁将使用它,我会尝试以正确的方式进行操作。 我真的想不出一种快速、整洁、可靠的方法来做到这一点,但我认为我可以使用 bourne shell 脚本来做到这一点,例如: for a in * .* do rm -rf "$a" done 现在 - 这是安全的,因为 for 循环保护“rm”的命令行免受十亿个输入的影响,并且变量周围的双引号保护它免受转义字符或分号或其他元垃圾等古怪事物的影响。它也比 find + xargs 慢得多。 所以我想正确的答案是“没有程序可以做到这一点。你必须编写一个程序才能可靠地做到这一点。” 我想这就是 Stallman 等人对 find 和 xargs 所做的...... Keith Smith 2009-06-24T10:13:00+08:002009-06-24T10:13:00+08:00 为什么不只是: rm -rf directory 您将收到一条错误消息,因为您无权删除该目录。但它也会删除目录中的所有内容,包括那些麻烦的隐藏文件。 Rajat 2009-06-26T07:01:48+08:002009-06-26T07:01:48+08:00 我相信可以使用: rm -rf /test/* Arie K 2009-06-24T08:56:09+08:002009-06-24T08:56:09+08:00 你可以试试 # rm -rf [dir]/* [dir]/.*
或者
如果你想看看发生了什么。
混乱-您担心 rm 将永远删除 ..
我进行了快速搜索,并在http://plan9.bell-labs.com/7thEdMan/vol1/man1.bun的第 7 版 unix 手册中找到了 rm 的手册页,其中说:
诊断
鉴于第 7 版 unix 是所有现代 unix 的父级,并于 1979 年发布,我会说这是一件非常安全的事情。它不会做任何事情,但不会造成任何伤害。
现在,像 chown 这样的其他程序会很高兴地“下降”到 .. 如果你做一些古怪的事情,比如“chown -Rh user .*”,但 rm 不是 chown,会导致各种混乱。
如果当前目录可以使用,则为简易版本:
如果当前目录不好,则更难的版本:
查找 /path/dir/ -type f -print|xargs rm
这是 unix 的黑暗区域之一,可以快速变得粘稠。
上面的每个例子都解决了 unix 中一个长期存在的错误,现在人们只是把它看作是一个可爱的小个性怪癖。
寻找 。| xargs rm
如果目录中有古怪的文件名(如换行符或空格),则不起作用。如果文件名带有 ;,您甚至可以开始删除不在目录中的其他文件。在里面。谁知道如果文件名中带有 ` 会发生什么。问问小鲍比桌子就行了。事情很快就会变得令人兴奋。
Bill Weiss 的评论正确地指出,如果您在 find 中使用 -print0 并在 xargs 中使用 -0,则现代版本的 find 和 xargs 正确使用 null 作为 find 找到的每个事物的字段分隔符。我不是一个值得信赖的人,并且对旧的、随机损坏的 unix 版本有所了解,我倾向于对这些新奇的 gnuisms 保持警惕,即使它们工作得很好,并且在这种情况下是这个特定问题的正确答案。
如果您在该目录中有 10,000 个文件,则 rm -r /path/to/directory/* 将不起作用。
现在 - 大多数情况下我只是懒得做这件事,所以我将使用 rm -rf 并查看错误是否有错误。如果我 100% 确定没有古怪的文件,我可能会使用 find 和 xargs,尽管我并不真正相信它们。
如果我在自动运行的脚本中执行此操作,并且我不知道这将使用多长时间或谁将使用它,我会尝试以正确的方式进行操作。
我真的想不出一种快速、整洁、可靠的方法来做到这一点,但我认为我可以使用 bourne shell 脚本来做到这一点,例如:
现在 - 这是安全的,因为 for 循环保护“rm”的命令行免受十亿个输入的影响,并且变量周围的双引号保护它免受转义字符或分号或其他元垃圾等古怪事物的影响。它也比 find + xargs 慢得多。
所以我想正确的答案是“没有程序可以做到这一点。你必须编写一个程序才能可靠地做到这一点。” 我想这就是 Stallman 等人对 find 和 xargs 所做的......
为什么不只是:
您将收到一条错误消息,因为您无权删除该目录。但它也会删除目录中的所有内容,包括那些麻烦的隐藏文件。
我相信可以使用: rm -rf /test/*
你可以试试