GNU/Linux >> Linux の 問題 >  >> Linux

ある場所にあるすべてのディレクトリを幅優先で再帰的に一覧表示するにはどうすればよいですか?

標準ツールを使用して実行する場合は、次のパイプラインが機能するはずです:

find . -type d | perl -lne 'print tr:/::, " $_"' | sort -n | cut -d' ' -f2

つまり、

<オール>
  • すべてのディレクトリを最初から詳細に検索して印刷
  • 各ディレクトリのスラッシュの数を数え、パスの先頭に追加します
  • 深さ (つまり、スラッシュの数) で並べ替える
  • パスだけを抽出します。
  • 検索される深さを制限するには、検索コマンドに -maxdepth 引数を追加します。

    find 出力と同じ順序でディレクトリをリストしたい場合は、「sort -n」の代わりに「sort -n -s」を使用します。 「-s」フラグは、並べ替えを安定させます (つまり、同等に比較される項目間で入力順序を保持します)。


    find コマンドは -printf をサポートします 多くのプレースホルダーを認識するオプション。

    そのようなプレースホルダーの 1 つが %d です。 find を基準にして、指定されたパスの深さをレンダリングします 開始しました。

    したがって、次の簡単なワンライナーを使用できます:

    find -type d -printf '%d\t%P\n' | sort -r -nk1 | cut -f2-
    

    これは非常に簡単で、perl のような重いツールに依存しません。 .

    仕組み:

    • ファイルのリストを内部的に生成し、それぞれが 2 フィールド行としてレンダリングされます
    • 最初のフィールドには、(逆の) 数値ソートに使用される深さが含まれ、次に切り取られます
    • その結果、1 行に 1 ファイル、深いものから順に単純なファイル リストが表示されます

    Linux
    1. Linuxですべてのファイルをサイズ別に一覧表示または並べ替える方法

    2. symlink ディレクトリ内のファイルを含む、ディレクトリ内のすべてのファイルを再帰的に一覧表示する

    3. アプリケーション ディレクトリからすべての .svn ディレクトリを削除する方法

    1. LinuxでCでディレクトリを再帰的にリストする方法は?

    2. 最大のディレクトリまたは最大のファイルを見つける方法は?

    3. ファイルを再帰的にリストし、変更時間でソートする方法は?

    1. 2 つのディレクトリにまたがるすべての一意のファイルを検索/一覧表示する方法は?

    2. Linux ですべての空のファイルとディレクトリを再帰的に削除するにはどうすればよいですか?

    3. Linuxでパーティションのすべてのファイルを一覧表示する方法は?