在文件夹及其子文件夹中删除所有隐藏文件

5
我需要删除当前文件夹及其子文件夹中的所有隐藏文件。是否有一条单行命令可以做到,而不需要创建脚本?

你是指 find $some_directory '.*' -delete 吗? - Fred Foo
我通常使用.??*来避免匹配...。如果你要执行rm -rf .??*(它不会删除子目录中的点文件),这尤其有用。 - Ronald
1
小问题:.??* 会忽略像 .a 这样的“有效”点文件或目录。 - chepner
2个回答

10

使用

find "$some_directory" -type f -name '.*' -delete

如果您想连同隐藏目录一并删除,您需要更加小心以避免删除...目录,这正如Ronald所提到的。

find "$some_directory" -name '.*' ! -name '.' ! -name '..' -delete

使用任何一个命令,你应该先不带-delete参数运行一次,以验证find返回的文件/目录列表是否只包含你真正想要删除的文件。

为了完整起见,我应该指出-delete是GNU扩展的find命令;符合POSIX标准的命令是

find "$some_directory" -type f -name '.*' -exec rm '{}' \;

即,将-delete替换为-exec ... \;,其中...被用于代替您将使用以删除文件的命令行,但实际文件名应替换为'{}'


1
全局模式 '.[^.]*' 应该能够找到不是 ... 的隐藏文件。 - glenn jackman
这个方法可行,但是在我的操作系统中,find命令不支持-delete标志。所以我使用了这个find "$some_directory" -type f -name '.*' | xargs rm的命令。 - Dinesh

1

针对我的Netgear Stora,我想删除所有隐藏的.webview、.thumbnails、.AppleDouble等文件和文件夹。以下操作在/home/yourusername/文件夹中进行:

find -type f -name '.*' ! -name '.' ! -name '..'  -exec rm -fv '{}' \;

然后

find -type d -name '.*' ! -name '.' ! -name '..'  -exec rm -frdv '{}' \;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接