ディレクトリ内のすべての(テキスト)ファイルを1つにマージする方法は?

ディレクトリ内のすべての(テキスト)ファイルを1つにマージする方法は?

14個のファイルがあり、すべて1つのテキストで構成されています。私はそれらを一つにまとめたいと思います。どうすればいいですか?

答え1

技術的にはcat("connect")実行する必要がありますが、ほとんどの人はファイルを標準出力に出力するためにのみ使用します。複数のファイル名を指定すると順番に出力され、新しいファイルにリダイレクトできます。すべてのファイルであれば使用できます./*(または/path/to/directory/*そのディレクトリにない場合)。シェルはそれをすべてのファイルに拡張します。ファイル名(デフォルトでは隠しファイルを除く)。

$ cat ./* > merged-file

globを拡張するために、cshまたはシェルを使用していないことを確認してください。tcsh後ろにmerged-file以前に存在しなかった出力の機能をオンにしますmerged-file。そうしないと、ファイルシステムをいっぱいにする無限ループが発生する可能性があります。

ファイルのリストは語彙順にソートされます。を使用している場合は、zshglob修飾子を使用して順序を変更できます(番号、年齢、サイズなど)。

サブディレクトリにファイルを含めるには、次を使用します。

find . ! -path ./merged-file -type f -exec cat {} + > merged-file

ただし、ファイルのリストは並べ替えられず、隠しファイルが含まれていることに注意してください。-type fこれは以下に限定されます。定期的な他の種類のファイルを含める可能性が低いからです。 GNUを使用すると、通常のファイルへのシンボリックリンクも含めるようにfind変更できます。-xtype f

zshシェルを使用して、

cat ./**/*(-.) > merged-file

同じことを行います((-.)実装と同じです-xtype f)、ソートされたリストを提供し、隠しファイルを除外します(D再インポートするには修飾子を追加します)。zargsこの問題を解決するために使用できますパラメータリストが長すぎます。間違い。

答え2

ファイルが同じディレクトリにない場合は、接続する前にfindコマンドを使用できます。

find /path/to/directory/ -name *.csv -print0 | xargs -0 -I file cat file > merged.file

ファイルがすでにソートされていて分析のためにマージしたい場合に便利です。


携帯性が向上しました。

find /path/to/directory/ -name *.csv -exec cat {} + > merged.file

ファイルの順序が維持される場合もありません。

答え3

注文する

$ cat * > merged-file

実際、接続に「マージされたファイル」を含むランアウェイファイルを生成する望ましくない副作用があります。この問題を解決するには、マージされたファイルを別のディレクトリに書き込むことができます。

$ cat * > ../merged-file

または、パターンマッチングを使用してマージされたファイルを無視します。

$ cat *.txt > merged-file

答え4

次のようにファイルを指定してpatternから、すべてのファイルをマージできます。

cat *pattern* >> mergedfile

関連情報