web-dev-qa-db-ja.com

ディレクトリツリー全体を調べて、パイプ可能なファイルのリストを1つ作成します

これはすでに答えられているかもしれません。しかし、私はそれを見つけることができませんでした。

私が持っています:

directory
directory/subdirectory/subdirectoryofsubdirectory
directory/sub-subdirectory/subdirectoryofsub-subdirectory/subdirectoryofsubdirectoryofsub-subdirectory
directory/sub-sub-subdirectory
directory/sub-sub-sub-subdirectory

各ディレクトリとサブディレクトリにはファイルが含まれています。それらすべてをリストし、リストをcatにパイプし、リストをテキストファイルにcatします。これは「ワンライナー」で行うことができますか?もしそうなら、それを提供してください。または、スクリプトが必要ですか?必要な場合、スクリプトを作成するためにどのコマンド/構造が必要ですか?

4
ixtmixilix

最善の策はfindコマンドだと思います。リスト内のディレクトリではなくファイルだけが必要な場合は、次のようにします。

find directory/ -type f -print > textfile

Findコマンドは、ファイルを再帰的にリストします。 (ディレクトリもリストしたい場合は、-type fを削除してください)。 > textfileは、catを必要とせずにstdoutをtextfileという名前のファイルにリダイレクトします。

findは、多くのオプションを備えた強力なツールです。出力を少し微調整する必要がある場合は、man findを参照してください。

[〜#〜] update [〜#〜](thanks gvkv ):

ファイルのcontentsを単一のテキストファイルに入れたい場合、それを行う1つの方法は次のとおりです。

find Documents/ -type f -exec cat {} + > textfile
10
Steven D

Steven Dの答え が説明するように、findは一般的な方法です。シェルがそれをサポートしている場合、**を使用して任意の数のサブディレクトリに一致させることができます(bashでは*と同じで、デフォルトでは1つしか一致しませんが、Dennisのコメントを参照してください)。行う:

cat **/*
3
Michael Mrozek