web-dev-qa-db-ja.com

Linuxでファイルを作成しますか? (タッチvsエコー)

私は一般的にLinuxにかなり慣れていないので、いくつかのコマンドのdoやdoについてあまり詳しくありません。

ファイルを作成したかったのですが、次のことに気づきました。

touch file.txt `

ファイルを作成しますが、そうします:

echo >> file.txt

そしてまた

> file.txt

">"と "touch"で作成されたファイルはどちらも0バイトですが、 "echo"で作成されたファイルは1バイトです。

ファイルのサイズが異なるのはなぜですか?ファイルを作成するための最良の方法は何ですか? 「touch」や「>」ではなく「echo」を使ってファイルを作成する必要があるのはいつですか。

2
Alex Valdez

ファイルの作成に関する一般的な質問については、次を参照してください。 ファイルを作成するためのシェルコマンドがないのはなぜですか?


> fileecho >> fileの両方を使用すると、Shellはファイルがまだ存在しない場合に作成します。

> fileを使用すると、ファイルがすでに存在する場合、そのファイルは切り捨てられます。コマンドが指定されなかったため、ファイルには何も書き込まれず、ファイルは空になります。

echoは引数なしで空行を出力します。したがって、出力には行末文字、通常は改行(LF、\n)が含まれます。

% echo | od -c
0000000  \n
0000001

したがって、echo >> fileを使用すると、ファイルに1バイトが書き込まれます。ファイルがすでに存在する場合、>>(上書き)ではなく>(追加)を使用したため、ファイルに1バイトが追加されます。

touchは、まだ存在しない場合はファイルを作成し、それ以外の場合はファイルのタイムスタンプを更新します。 touchはファイルの内容を変更しないので、ファイルが既に存在し、その中に内容が含まれている場合、touchの後も内容は変わりません。

どちらを使用するかは、使用するエフェクトによって異なります。

3
muru

muruの回答 動作の違いをうまく説明しています。

何をしたいかに応じて、まったく同じことを実現するための複数の方法が考えられます。その場合、それは「味」または読みやすさの問題になる可能性があります。私はtouchを好みます。それは間違いなく安全です-ファイルがすでに存在していて、その内容を失いたくない場合。それも印象的です。

スクリプトでコマンドを記述している場合、一般的な規則は、人々がコードを書いた回数よりも多くコードを読むことです。つまりコンピュータだけでなく、人間とコミュニケーションをとっています。次のコード行は少しわかりにくいかもしれません。

> file

> fileとまったく同じ動作が必要な場合は、truncateというコマンドもあります。 truncateは、GNU coreutils。

1
sourcejedi