まあ、状況はすべて同じ名前のプロファイルに従う未知の数のサブディレクトリがあるということです。
フォルダ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
特定の基準に一致するすべてのファイルを検索する
./
find
現在の場所(つまり、作業ディレクトリ)から検索するように指示します。-type f
find
fileというディレクトリがある場合にのみファイルを検索するように指示します。-regex
find
フルパスが指定されたパターンと一致するファイルのみを検索することを示します。この場合、「./folder」の後には、1つ以上の数字、新しいディレクトリ、「file」、1つ以上の数字が続きます。-print0
出力にヌル文字で区切られたファイルを見つけるように指示しますfind
。これはファイル名に表示されないことを保証し、ファイル名に改行文字が含まれていても機能します。
sort
インポートしたリストを並べ替えます。
- デフォルトの改行区切り項目の代わりにヌル文字区切り項目を
-z
ソートするように指示します。sort
- 人間が項目を直感的に並べ替えるように、項目を並べ替えるように指示します
-V
。つまり、中間ではない後に項目を並べ替えます。sort
file11
file1
file2
xargs
インポートされた項目を使用して引数として渡すと、推測できるように、cat
異なる--null
項目xargs
は空白や改行文字ではなくnull文字で区切られます。