web-dev-qa-db-ja.com

コマンドラインからファイルの内容を消去する方法

私にはもう必要ないものがたくさん入っているログファイルがあります。内容をクリアしたいです。

画面にコンテンツを印刷する方法を知っています。

cat file.log

ファイルを1行ずつ編集する方法を知っています。

nano file.log

しかし、各行を一度に1つずつ削除したくはありません。ファイルを破壊することなく1つのコマンドで実行する方法はありますか?

271
Andrew

Bashでは、ちょうど

> filename

しましょう。

これで空のファイルファイル名が残ります。

pS.

Sudo呼び出しが必要な場合は、ここで回答されるように としてtruncateを使用することを検討してください

444
geek

あなたは、ユーザーコマンドを使用することができます:truncate

truncate -s 0 test.txt

( "-s 0"でサイズを指定します)

http://www.commandlinefu.com/commands/view/12/empty-a-file

114
nono

あなたはこれをすることができます:

echo -n "" > file.log

>からの(null)入力をファイルに書き込むためにecho -nを使用します。

>>を使用するとファイルへのnull入力が追加されます(事実上それをtouchingする以外に何もしません)。

34
Thechickenmoo
: > file.log

Bashの> filenameと同じですが、より多くのシェルで動作します (クレジット)true組み込み関数(出力はありません)からの出力をfilenameにリダイレクトします。

25

ZSH

>! filename

ZSHは、ioリダイレクト演算子>を使用して、ファイルを不正使用から保護します。 >!を使用すると、既存のファイルを強制的に切り捨てることができます。

ZSHにBashのリダイレクションの振る舞いを使用させたい場合は、ファイルの乱用からの保護はないので、シェルにclobberオプションを設定する必要があります。

詳細情報: http://zsh.sourceforge.net/Doc/Release/Redirection.html

9
Brian Wigginton

あなたがコマンドラインでvimエディタの内側からしたいのなら、これを試すことができます:

vim file.txt 

押す Esc

:1,$d

押す Enter

すべての行が削除されています。

8
soum
$ rm file.log; touch file.log

または

$ cat > file.log

control-dが続きます。

または...または...または...

ああ。これは単一のコマンドバージョンです。

$ dd if=/dev/null of=file.log
4
dmckee

以下のコマンドでもうまくいくはずです。

cat /dev/null > file.log
4
paarth batra

ファイルにアクセスするためにスーパーユーザー特権にSudoする必要がある場合は、承認された回答は機能しません。これを使うとうまくいく:

truncate -s0 file

またはSudoで明示的に:

Sudo truncate -s0 file

詳細はこちら http://www.commandlinefu.com/commands/view/12/empty-a-file

2
timeSmith

ファイル名にスペースがある場合は、次のようにします。

for file in /path/to/file/*; do > "$file"; done

(50の評判がないため、前の回答へのコメントに含めることはできませんでした。制限が逆になることがあります。)

1
d491049

いくつかの選択肢:

ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log
1
kenorb

> a.txt

Bashの> filenameと同じですが、より多くのシェルで機能します(クレジット)。本当の組み込み(出力がない)からの出力をfilenameにリダイレクトします。

0
user1021769

一度に1行?

何でもできる素敵なテキストエディタvi(m)を試してください。この場合は、行に移動してd(削除用)を押し、もう一度d(行用)を押します。

0
Phoshi

また、ファイルが複数ある場合は、次のものを使用できます。

for file in /path/to/file/*; do > $file; done

これは、同じディレクトリにあるログファイルに役立ちます。

0
DomainsFeatured

私の許可ではこれがうまくいった唯一のものです。

touch temp.txt
Sudo mv temp.txt original-file.txt
0
Morgan