多くのドキュメントをtxtとして保存しました。私はそれらを一緒に印刷したいので、最初にそれらを一緒に単一のファイルにしたいです。この場合、順序は関係ありません。
マージするファイルの名前を入力するのではなく、フォルダー内のすべてのtxtファイルをマージするソリューションが必要です。
コマンドまたはGUIで実行できますか?
こちら に見えました。 join
の使用方法がわからない。
出力リダイレクトで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
の使用と出力リダイレクトとは完全に独立しています-cat
の引数としてすべてのファイルを提供するだけのBashです。
紙とテープの場合と同様に、ファイルを接着(結合)するだけです。これを処理できる実際のファイル形式は気にしません。テキストファイルでは機能しますが、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
を削除する必要があります。削除しないと、ファイルをそれ自体に書き込むことになり、動作しません。
結合するファイルがすべて.txt
で終わる場合は、単純にしてください:
cat *.txt > combined.txt
ディレクトリにテキストファイルのみが含まれる場合も簡単です。
cat * > combined.txt
(combined.txt
を一度作成すると、それを再度実行すると*
の展開に含まれ、奇妙な動作につながることに注意してください)。
ディレクトリ内の一部のファイルを選択し、他のファイルを選択しない場合は、ファイル名で必要なファイルを区別できるのが最善です。そうでない場合は、find
でお洒落になります。しかし、私はあなたがそこまで行く必要があるとは思いません。
Thunarカスタムアクションスクリプトcipricus によって書かれた同様のNautilus scriptそして、私はこの主題に関する参考のためにこの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 の answer へのコメントで Sadi によって提案されたものとは異なります:
cat %N > JoinedFile
選択したファイルのみが結合されます。外観条件をテキストファイルに制限します。
Sadi に特に感謝します。このコメントは、私の問題に対する最も明確で最新のソリューションを提供してくれました。
gertvdijk の answer を決定的なものとして受け入れました。 Sadiのコメントの機会になっただけでなく、他の人にとってはさらに価値があるようです。
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.