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