与えられたディレクトリツリーの最大深度を見つける方法はありますか? maxlengthを増やし、見つかったディレクトリの数を比較するためにfindを使用するつもりですが、より簡単な方法がありますか?
答え1
1つの方法はGNUを想定することですfind
。
find . -type d -printf '%d\n' | sort -rn | head -1
これは特に効率的ではありませんが、-maxdepth
他のものを順番に試すよりもはるかに優れています。
答え2
たとえば、木の最大深さを見つけるには、次のように/
します。
find / -type d
/
各ディレクトリは深さに関係なく提供されます。したがって、awk
結果は/
数を見つけるための区切り文字であり、count-1
ツリーの最大深度を提供するため、/
コマンドは次のようになります。
find / -type d | awk -F"/" 'NF > max {max = NF} END {print max}'
答え3
updatedb
thenの使用を検討してくださいlocate
。データベースを照会するときはlocate
非常に迅速に実行され、各ファイルを個別に要求するよりもはるかに高速です。updatedb
データベースを再作成せずに変更のみを更新するため、速度も高速です。唯一の欠点は、updatedb
独自のユーザー空間データベースを作成して維持しない限り、デフォルトで実行するにはroot権限が必要になることです。
locate
ファイル名に改行文字が含まれている可能性があるため、出力を処理するときはさらに注意が必要です。ファイル名の区切り文字として null バイトを使用することをお勧めします。
それらを追加します。
updatedb && locate -0 "$(pwd)" | awk -v RS='\0' -F"/" '{print NF-1}' | sort -n | tail -n1
完璧なawkスクリプトを提供してくれた@sai sasankaに感謝します。