我正在尝试删除目录中的所有文件和子目录。我曾经rm -r删除所有文件,但我想删除所有文件和子目录,顶层目录本身除外。
例如,我有一个顶级目录,例如images。它所包含的文件header.png,footer.png和一个子目录。
现在我想删除header.png,footer.png和子目录,但不是images。
我如何在Linux中做到这一点?
cd进入目录,然后执行其中rm -Rf的所有文件和目录。
—Noufal Ibrahim
Answers:
如果您的顶级目录被调用images,请运行rm -r images/*。这使用shell glob运算符在中的每个文件或目录上*运行。rm -rimages
隐藏的文件不会被删除。
—雷托
要删除隐藏文件,您必须指定:
rm -r images/* images/.*
对于其glob包括.和的shell..,这将导致类似的错误
rm: cannot remove `.' directory `images/.' rm: cannot remove `..' directory `images/..'
但是它将删除隐藏文件。
一种没有错误消息的方法是使用具有最小深度的查找/删除。这是非常恰当的。
find images -mindepth 1 -delete
您的发现可能缺少-mindepth或-delete谓词,在这种情况下,您可以这样做:
find images/. ! -name . -prune -exec rm -rf {} +
我的建议是使用与“ images / ..”相匹配的“ rm -r images /.*”,而不是“ images /../ ..”。递归不能向上,因为'images /../ images / ..'还是同一目录。
—不明的使用者
要删除目录中的所有文件和目录(包括隐藏的文件和目录),可以尝试以下操作:
用于ls -Ab匹配所有文件/目录
cd dir_name && rm -rf `ls -Ab`
用于find匹配所有文件/目录
find dir_name -mindepth 1 -delete
或者,如果您find不支持-