回答:
cat
出力リダイレクトで使用します。構文:cat file [file] [[file] ...] > joined-file
。
ファイルが2つだけの例(さらに多くのファイルを作成できます):
$ echo "some text in a file" > file1
$ echo "another file with some text" > file2
$ cat file1 file2 > mergedfiles
$ cat mergedfiles
some text in a file
another file with some text
「多数のドキュメント」がある場合は、シェルグロビング(パターン)を使用します。
cat input-files-dir/* > joined-file
これにより、そのディレクトリ内のすべてのファイルが現在のディレクトリに結合されます(出力ファイル自体と一致しないようにします)。これはcat
、出力リダイレクトの使用とは完全に独立しています。これは、すべてのファイルをの引数として提供する単なるBashですcat
。
紙とテープの場合と同様に、ファイルを接着(結合)するだけです。これを処理できる実際のファイル形式は気にしません。テキストファイルには機能しますが、PDF、ODTなどには機能しません。まあ、それらを結合しますが、有効なPDF / ODTではありません。
以下のようphoibosが指摘シェルグロブはファイル名のアルファベット順になります。これが、Bashとシェルグロビングの仕組みです。
input file is output file
エラーに関する補遺入力ファイルのパターンが出力とまったく同じファイルに一致する場合、エラーが発生します。これは安全機能です。例:cat *.txt > out.txt
2回目に実行すると、これが発生します。
それについてできること:
*.txt
出力ファイルoutput.out
と入力ファイルのパターンは衝突しません。input-files-dir
ディレクトリを使用してすべてのファイルを配置し、現在の作業ディレクトリに出力しています。これにより、このエラーを取得できなくなります。これを行う簡単な方法は、catを使用することです。
cat file1 file2 > joined_file
発行するだけであればcat file1 file2
、両方のファイルが標準出力に表示されます。を使用>
することで、標準出力をファイルにリダイレクトするだけです。別のコマンドでも機能します。
簡単なループでそれを行います:
for i in *.txt; do cat "$i" >> complete.txt; done
>>
ファイルに追加します。
注:何らかの理由でコマンドを再度実行する必要がある場合は、を削除する必要がありますcomplete.txt
。そうしないと、ファイルをそれ自体に書き込むことになり、機能しません。
cat
。
cat *.txt
。forループをソートする必要があります。
for
Bash で使用するか、Bashの他の場所で使用するかは関係ありません。
すべてを結合したいファイルがで終わる場合は.txt
、単純にしてください:
cat *.txt > combined.txt
ディレクトリにテキストファイルのみが含まれる場合も簡単です。
cat * > combined.txt
(一度作成するとcombined.txt
、それを再度実行するとの拡張に含まれ、*
奇妙な動作につながることに注意してください)。
ディレクトリ内の一部のファイルを選択し、他のファイルを選択しない場合は、ファイル名で必要なファイルを区別できるのが最善です。そうでない場合は、でお洒落になりfind
ます。しかし、私はあなたがそこまで行く必要があるとは思いません。
cipricusによって書かれたThunarカスタムアクションスクリプトも同様のNautilusスクリプトを書くように私を刺激し、この主題に関する参考のためにこのQ&Aを参照する他の人にとって役立つと思いました。だからここにある:
#!/bin/sh
#Nautilus Script to join selected text files in a single file and open the joined file with default text editor
#
IFS=$'\n'
FILENAME="JoinedFile_$(date +%Y-%m-%d-%H-%M-%S).txt"
cat "$@" > "$FILENAME"
xdg-open "$FILENAME"
これは、これらのソリューションをThunarのカスタムアクションで機能させることに関連する、他の回答の補足およびバリエーションです。
これらのすべてがこのように使用できるわけではありませんが、一部は使用可能です。
最も興味深いのは、Thunarのコンテキストメニューから選択したファイルをマージできることです。
これは、gertvdijkの答えに対するコメントでSadiが提案したものとは異なります。
cat %N > JoinedFile
選択したファイルのみが結合されます。外観条件をテキストファイルに制限します。
私の問題に対する最も明確で最新のソリューションを提供してくれたコメントのSadiに感謝します。
私はgertvdijkの答えを決定的なものとして受け入れました。それはSadiのコメントの機会であっただけでなく、他の人にとってはさらに価値があるように思われ、十分に議論された完全なソリューションを提供します(私のCLIの読解スキルをいくらか上回ります)。
find
コマンドを試すこともできますが、
find . -name "*.txt" -type f -exec cat {} + > file
.txt
現在のディレクトリ内のファイルを検索し cat
、各ファイルでコマンドを実行します。最後に、出力全体がファイル名にリダイレクトされましたfile
(現在のファイル自体に直接作成されます)。
説明:
. # current directory
-name # helps to find only .txt files.
-type f # Only files
-exec cat {} + # helps to run cat command on the founded .txt files.
> # Output redirection operator
file # to store final output.
merge-files-online.comなどのオンラインユーティリティを使用することもできます。
ls
一致するものだけをリストするために使用してパターンを試してください。たとえばls *.txt
、何が一致しているかを確認します。