GNU/Linux >> Linux の 問題 >  >> Linux

あるファイルを別のファイルにリダイレクトするのはUuoc(猫の無用な使用)ですか?

file2の内容を作成したい場合 file1の内容と一致する 、明らかに cp file1 file2を実行できます 。

ただし、すべてを保持したい場合 file2について 例外 コンテンツ(所有者、権限、拡張属性、ACL、ハードリンクなど)の場合、 cpを実行したくありません。 。*その場合は、 file1の内容を削除したいだけです。 file2に 。

次のようになります:

< file1 > file2

しかし、それは機能しません。 file2 何にも切り捨てられず、書き込まれません。ただし、

cat < file1 > file2

します 仕事。

最初のバージョンが機能しないことに驚きました。

2番目のバージョンはUUOCですか?リダイレクトを使用するだけで、コマンドを呼び出さずにこれを行う方法はありますか?

注:UUOCは、真のアンチパターンというよりも、より重要なポイントであることを認識しています。

* tniles09が発見すると、 cp 予定 実際、この場合は機能します。

承認された回答:

cat file2 UUOCではありません。古典的には、 < および> システムレベルでのファイル記述子の複製に対応するリダイレクトを実行します。
ファイル記述子の複製自体は何もしません(> リダイレクトはO_TRUNCで開きます 、正確に言うと、出力リダイレクトは出力ファイルを切り捨てます)。 <にさせないでください > シンボルはあなたを混乱させます。リダイレクトはデータを移動しません。ファイル記述子を他のファイル記述子に割り当てます。

この場合、 file1を開きます そのファイル記述子をファイル記述子に割り当てます ( == 0 )および file2 そのファイル記述子をファイル記述子1に割り当てます (> file2 == 1> file2

2つのファイル記述子ができたので、2つの間でデータをシャベルするプロセスが必要です。これが catです。 です。


Linux
  1. あるファイルの内容を別のファイルで検索する

  2. 複数のファイルの内容を 1 つのファイルに追加する方法

  3. あるファイルから別のファイルの単語を見つける方法は?

  1. あるドライブから別のドライブにファイル システム階層全体をコピーする

  2. strace をファイルにリダイレクトする

  3. ドメインをローカルで別のドメインにリダイレクトするにはどうすればよいですか?

  1. Linuxファイルシステムの種類の説明、どちらを使用する必要があるか

  2. Linuxでパーミッションをあるファイルから別のファイルにコピーまたは複製する方法

  3. ある Linux サーバーから別の Linux サーバーに大きなファイルをコピーする