回答:
bash組み込みリダイレクト(tldp)を使用します。
cat file2 >> file1
sudo
しcat
ます(プロンプトが表示されたら資格情報を入力します)。
tee
プログラムをご覧くださいcat 1 | tee -a 2 3
。--append
(または-a
略して)スイッチの後、好きなだけファイルを置くことができます。
cat file2 >> file1
>>
オペレータは、名前のファイルに出力を追加したり、それが存在しない場合は名前のファイルを作成します。
cat file1 file2 > file3
これにより、2つ以上のファイルが1つに連結されます。必要な数のソースファイルを持つことができます。例えば、
cat *.txt >> newfile.txt
更新20130902
コメントで、eumiroは「試さないでくださいcat file1 file2 > file1
」と提案しています。これが予期した結果にならない理由は、リダイレクトの受信ファイルが、左側のコマンド>
が実行される前に準備されるためです。この場合、最初にfile1
長さがゼロに切り捨てられて出力用に開かれ、次にcat
コマンドは長さがゼロになったファイルとfile2
into の内容を連結しようとしますfile1
。その結果、の元のコンテンツfile1
が失われ、代わりにそのコピーがfile2
おそらく予期されたものとは異なります。
更新20160919
コメントで、tparteeはバッキング情報/ソースへのリンクを提案しています。信頼できるリファレンスとして、私は親切な読者にlinuxcommand.orgのshマニュアルページを紹介しています。
コマンドが実行される前に、シェルによって解釈される特別な表記法を使用して、その入力と出力をリダイレクトできます。
それは読者が知っておくべきことを読者に伝えますが、それを探しておらず、ステートメントを単語ごとに解析していないと見落としがちです。ここで最も重要な言葉は「前」です。コマンドが実行される前に、リダイレクトが完了(または失敗)します。
cat file1 file2 > file1
シェルの例の場合、最初にリダイレクトを実行して、コマンドが実行される前にコマンドが実行される環境にI / Oハンドルが配置されるようにします。
Ian AllenのWebサイトには、リダイレクションの優先順位が詳細に説明されている、より使いやすいバージョンがLinuxコースウェアの形で用意されています。彼のI / O Redirection Notesページは、リダイレクトがコマンドなしでも機能するという観察を含め、このトピックについて多くのことを述べています。これをシェルに渡す:
$ >out
... outという名前の空のファイルを作成します。シェルは最初にI / Oリダイレクションを設定し、次にコマンドを探し、何も見つからず、操作を完了します。
cat file1 file2 > file1
-これはおそらくあなたが待っているようには機能しません。
>>
ただろうファイルを変更しますfile1
。T.Robは、実際には不正確な何かを提出するためにただ競争するのではなく、彼の答えを説明するはるかに優れた仕事をしました。質問のテキストに基づいて、私はそれcat file1 file2 > file3
が@asirが探していた適切なコマンドだと思います。
>
最初に実行されることです。したがって、実行するcat file1 file2 > file1
と最初にClobberが実行されfile1
、次に長さがゼロになったファイルがそれ自体にコピーされます。これは、操作が発生する可能性のある順序と発生する順序を考えると理にかなっていますが、多くの人を驚かせるほど微妙です。ですから、eumiroとあなたは答えのさらなる改善を促しました。それをありがとう!
>>
は、ファイルに追加してファイルを>
置き換えます。
参考までに、たとえば、大きなファイルがあり、一時停止して後で実行する必要がある場合、ddrescueを使用すると、タスクを中断できる方法で実行できます。
ddrescue -o $(wc --bytes file1 | awk '{ print $1 }') file2 file1 logfile
logfile
重要なビットです。Ctrl-C
まったく同じコマンドを再度指定することで、プロセスを中断して再開できます。ddrescueは、中断したlogfile
ところから読み取り、再開します。この-o A
フラグは、出力ファイル()のバイトAから開始するようにddrescueに指示しますfile1
。したがって、バイト単位wc --bytes file1 | awk '{ print $1 }'
のサイズを抽出するだけfile1
です(必要にls
応じて、出力から貼り付けることができます)。
コメントでngksが指摘したように、欠点はddrescueがデフォルトでインストールされない可能性が高いため、手動でインストールする必要があることです。もう1つの問題は、リポジトリにある可能性があるddrescueの2つのバージョンがあることです。詳細については、このaskubuntuの質問を参照してください。必要なバージョンはGNU ddrescueで、Debianベースのシステムでは次の名前のパッケージgddrescue
です。
sudo apt install gddrescue
他のディストリビューションについては、パッケージ管理システムでddrescueのGNUバージョンを確認してください。
別の解決策:
cat file1 | tee -a file2
tee
たとえば、次のように、好きなだけファイルに追加できるという利点があります。
cat file1 | tee -a file2 file3 file3
内容追加しますfile1
にしfile2
、file3
そしてfile4
。
manページから:
-a, --append
append to the given FILEs, do not overwrite
cat
簡単な解決策になる可能性がありますが、大きなファイルを連結すると非常に遅くなりますfind -print
。猫を一度使用する必要がありますが、あなたを救うことです。
amey@xps ~/work/python/tmp $ ls -lhtr
total 969M
-rw-r--r-- 1 amey amey 485M May 24 23:54 bigFile2.txt
-rw-r--r-- 1 amey amey 485M May 24 23:55 bigFile1.txt
amey@xps ~/work/python/tmp $ time cat bigFile1.txt bigFile2.txt >> out.txt
real 0m3.084s
user 0m0.012s
sys 0m2.308s
amey@xps ~/work/python/tmp $ time find . -maxdepth 1 -type f -name 'bigFile*' -print0 | xargs -0 cat -- > outFile1
real 0m2.516s
user 0m0.028s
sys 0m2.204s
time (find . -maxdepth 1 -type f -name 'bigFile*' -print0 | xargs -0 cat -- > outFile1)
。猫だけのコマンドと同様の結果が得られるはずです。
これをなしcat
で行うこともできますが、正直に言うcat
とより読みやすくなっています。
>> file1 < file2
>>
追加STDINへfile1
と<
ダンプをfile2
するSTDIN。