递归隐藏空文件夹,忽略.DS_Store等

时间:2015-07-19 16:17:27

标签: bash terminal directory hidden-files alfred

我试图编写一个bash脚本来在当前目录中递归隐藏空文件夹。

这将最终用作Alfred工作流程的一部分,允许我隐藏/显示我的默认项目文件夹层次结构中的额外文件夹。我的目标是在重新认识项目时保持理智,但保持文件夹结构到位,这样我就可以保持项目之间的一致性。

我一直在试验这个终端命令

find . -empty -type d -exec chflags hidden {} +

这在理论上有效,但问题是Mac OS X将系统文件添加到文件夹中,我想为我的目的考虑为空。

隐藏目录时如何忽略.DS_Store等文件?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

find . -type d -exec bash -c "echo -ne '{}\t'; ls -a1 '{}' | wc -l" \; |   awk -F"\t" '$NF<=3{ system("chflags hidden " $1 ) }'

如果$ NF&lt; = 3将翻译为隐藏所有内部包含3个或更少项目的文件夹,则通常会:

. 
..
.DS_Store

你当然可以用更复杂的东西替换那部分,但你应该明白这一点。

或者您可以使用grep来精确搜索以消除特定文件,例如

find . -type d -exec bash -c "echo -ne '{}\t'; ls -a1 '{}' | egrep -v  '^\.(\.?|DS_Store)$' | wc -l" \; |   awk -F"\t" '$NF<=0{ system("chflags hidden " $1 ) }'

这将隐藏文件夹,只有当ls返回除了一个或多个(./../.DS_Store)之外的其他内容,如上面条件中所定义的那样。

相关问题