ディレクトリの深さを見つける方法

ディレクトリの深さを見つける方法

与えられたディレクトリツリーの最大深度を見つける方法はありますか? 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

updatedbthenの使用を検討してください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に感謝します。

関連情報