如何使用Bash删除所有隐藏的文件和目录?


28

显而易见的解决方案产生的退出代码为1:

bash$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
bash$ echo $?
1

一种可能的解决方案是跳过“。” 和“ ..”目录,但只会删除名称长度超过3个字符的文件:

bash$ rm -f .??*

好吧,如果您不太担心无法删除。&..那谁在乎呢?除非您担心脚本中的输出丑陋,否则我认为显而易见的解决方案是坦率地说其他类型的输入较少。
— 马特

请注意,..和。不是文件。它们是对目录的引用。。(仅一个点)是当前目录,而..(两个点)是指向上一级目录的链接。例如,如果是cd / home / user,则为。等于/ home / user和..等于/ home /换句话说,您不能删除。和..(。?)
— phuzion

感谢您的评论,马特。我经常在脚本中使用该命令,并按命令退出代码进行检查(设置-e)。在这些情况下,必须提供指示性的退出代码。
— Yonatan Broza 09年

没有内在的内在。和..可以防止它们被rm -rf删除。这只是rm的现代变体中增加的一种保护机制。
— kubanczyk,2009年

总是有rm -rf。* || 如果只想绕过该语句的set -e行为,则为true。
— Domingo Ignacio Galdos 2012年

Answers:


34
rm -rf。[^。]。?? *

应该抓住所有情况。。?? *仅匹配3个以上的字符文件名(如上一个答案中所述),。[^。]将捕获任何两个字符条目(..除外)。


感谢您的回答!基于此,我还得到了“ rm -rf。[^。] *”的缩写。
— Yonatan Broza

4
请注意使用较短的版本,它会产生相似但不相同的结果。它不会将名称与前面带有两个点的名称匹配(例如,有时会隐藏Rootkit等的“ ... /”)
— Russell Heilling 09年

并请小心进行PWD检查或您放松所有设置:)
— kommradHomer 2013年

这似乎不起作用zsh。有什么建议么?
— ryanjdillon '16

与zsh缺省的空通配符匹配被视为错误; 而bash只是简单地将其传递不变。若要使zsh行为相同,您可以使用命令unsetopt nomatch
— Russell Heilling

1
find -path './.*' -delete

这将匹配当前目录中以a开头的所有文件,并以.递归方式删除这些文件。未隐藏目录中的隐藏文件不受影响。

如果您真的想擦除目录中的所有内容,find -delete就足够了。


这将删除所有内容,而不仅仅是删除以.
— 开头的

哦,看来我误解为“删除包括隐藏文件在内的所有内容”的问题。
— Fritz

@kasperd谢谢,现在它实际上应该回答问题了。
— Fritz

0

最好的方法可能是:

  • 找 。-iname。* -maxdepth 1 -type f -exec rm {} \;

如果您只想查看将要删除的内容,请将rm更改为ls -l,以详细说明输出,您可能希望向rm添加-v选项

  • -type f选项告诉find命令仅查找文件(忽略目录,链接等)
  • -maxdepth 1告诉发现不要进入子目录

ps。不要忘记以“ \;”结尾


1
小心!您的意思是-iname'。*'或-iname。*,否则您将拖入。和..无论如何。
— Domingo Ignacio Galdos 2012年

-1
ls -la | awk '$NF ~ /^\.[^.]+/  {print $NF}' | xargs rm -rf

ls -la ............. long list (all files and folders)
$NF ................ last field (file or folder name)
~   ................ Regular Expression match
/^\.[^.]+/ ......... dot followed by not dot at least once +

If the last field $NF match pattern show it and send 
it to xargs which will perform the task.

这会中断您的文件名中包含空格的瞬间。
— CVn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.