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



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

这将最终被用作阿尔弗雷德工作流的一部分,允许我隐藏/显示额外的文件夹在我的默认项目文件夹层次结构。这样做的目的是让我在重新熟悉一个项目的时候保持清醒,但是要保持文件夹结构,这样我才能在项目之间保持一致。

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

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

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

隐藏目录时如何忽略。ds_store之类的文件?

你可以这样做:

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

$NF<=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)中的一个或多个(如上条件中定义的)时,才会隐藏文件夹。

最新更新