递归隐藏空文件夹,忽略.DS_Store,等等
Hide empty folders recursively, ignoring .DS_Store, etc
我正在尝试编写一个 bash 脚本来在当前目录中递归地隐藏空文件夹。
这最终将用作 Alfred 工作流程的一部分,允许我在我的默认项目文件夹层次结构中 hide/show 额外的文件夹。目标是在重新熟悉项目时保持理智,但保持文件夹结构不变,这样我就可以在项目之间保持一致。
我一直在试验这个终端命令
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 " ) }'
其中 $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 " ) }'
仅当 ls returns 只有一个或多个 (./../.DS_Store) 时才会隐藏文件夹,如上述条件中所定义。
我正在尝试编写一个 bash 脚本来在当前目录中递归地隐藏空文件夹。
这最终将用作 Alfred 工作流程的一部分,允许我在我的默认项目文件夹层次结构中 hide/show 额外的文件夹。目标是在重新熟悉项目时保持理智,但保持文件夹结构不变,这样我就可以在项目之间保持一致。
我一直在试验这个终端命令
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 " ) }'
其中 $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 " ) }'
仅当 ls returns 只有一个或多个 (./../.DS_Store) 时才会隐藏文件夹,如上述条件中所定义。