すべてのサブフォルダ内のすべてのテキストファイルを1つの巨大なテキストファイルにリンクする

すべてのサブフォルダ内のすべてのテキストファイルを1つの巨大なテキストファイルにリンクする

まあ、状況はすべて同じ名前のプロファイルに従う未知の数のサブディレクトリがあるということです。

フォルダ0、フォルダ1、フォルダ2、フォルダ3など

各フォルダには3つのテキストファイルがあり、これらのテキストファイルはすべてのフォルダに同じ3つのファイル名を持ちます。

ファイル1ファイル2ファイル3

すべてのフォルダ内のすべてのテキストファイルをフォルダ0、ファイル1、ファイル2、ファイル3から始め、すべてのフォルダで同じ順序で1つのテキストファイルにリンクする簡単な方法を見つけたいと思います。

これで、少数のフォルダに対してcatを使用できるようになりました。

cat folder0/file1 folder0/file2 folder0/file3 folder1/file1 folder1/file2 folder1/file3 folder2/file1 folder2/file2 folder2/file3 folder3/file1 folder3/file2 folder3/file3 > textfile

しかし、フォルダの数は不明です。おそらく100個または1000個でしょう。

これを行うことができるスクリプトを知っている人がいます。

ベストアンサー1

Unixツールとパイプのみを使用する:

find ./ -type f -regex './folder[0-9]+/file[0-9]+' -print0 | sort -zV | xargs --null cat

説明する:

find特定の基準に一致するすべてのファイルを検索する

  1. ./find現在の場所(つまり、作業ディレクトリ)から検索するように指示します。
  2. -type ffindfileというディレクトリがある場合にのみファイルを検索するように指示します。
  3. -regexfindフルパスが指定されたパターンと一致するファイルのみを検索することを示します。この場合、「./folder」の後には、1つ以上の数字、新しいディレクトリ、「file」、1つ以上の数字が続きます。
  4. -print0出力にヌル文字で区切られたファイルを見つけるように指示しますfind。これはファイル名に表示されないことを保証し、ファイル名に改行文字が含まれていても機能します。

sortインポートしたリストを並べ替えます。

  1. デフォルトの改行区切り項目の代わりにヌル文字区切り項目を-zソートするように指示します。sort
  2. 人間が項目を直感的に並べ替えるように、項目を並べ替えるように指示します-V。つまり、中間ではない後に項目を並べ替えます。sortfile11file1file2

xargsインポートされた項目を使用して引数として渡すと、推測できるように、cat異なる--null項目xargsは空白や改行文字ではなくnull文字で区切られます。

おすすめ記事