0

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

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

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

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

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

隐藏目录时如何忽略 .DS_Store 之类的文件?

4

1 回答 1

0

你可以这样做:

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) 时,这将隐藏文件夹,如上述条件中所定义。

于 2015-07-19T16:36:38.347 回答