web-dev-qa-db-ja.com

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

指定されたディレクトリツリーの最大の深さを見つける方法はありますか? maxdepthをインクリメントしてfindを使用し、見つかったディレクトリの数を比較することを考えていましたが、もっと簡単な方法があるのでしょうか?

6
ts01

GNU findと仮定して、これを行う1つの方法:

find . -type d -printf '%d\n' | sort -rn | head -1

これは特に効率的ではありませんが、別の-maxdepthsを順番に試すよりも確かにはるかに優れています。

13
Satō Katsura

これを試してください。たとえば、/の下でツリーの最大深度を見つけようとします。

find / -type d

深度に関係なく、/の下のすべてのディレクトリを提供します。したがって、awk結果をカウントして/を区切り文字として使用し、count-1/からツリーの最大深度を与えるため、コマンドは次のようになります。

find / -type d | awk -F"/" 'NF > max {max = NF} END {print max}'
5
ss_iwe

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に感謝します。

0
styrofoam fly