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 が 1 つ以上の (./../.DS_Store) 以外を返さない場合にのみ、フォルダーを非表示にします。

于 2015-07-19T16:36:38.347 に答える