私にはもう必要ないものがたくさん入っているログファイルがあります。内容をクリアしたいです。
画面にコンテンツを印刷する方法を知っています。
cat file.log
ファイルを1行ずつ編集する方法を知っています。
nano file.log
しかし、各行を一度に1つずつ削除したくはありません。ファイルを破壊することなく1つのコマンドで実行する方法はありますか?
Bashでは、ちょうど
> filename
しましょう。
これで空のファイルファイル名が残ります。
pS.
Sudo
呼び出しが必要な場合は、ここで回答されるように としてtruncate
を使用することを検討してください 。
あなたは、ユーザーコマンドを使用することができます:truncate
truncate -s 0 test.txt
( "-s 0"でサイズを指定します)
あなたはこれをすることができます:
echo -n "" > file.log
>
からの(null)入力をファイルに書き込むためにecho -n
を使用します。
>>
を使用するとファイルへのnull入力が追加されます(事実上それをtouch
ingする以外に何もしません)。
: > file.log
Bashの> filename
と同じですが、より多くのシェルで動作します (クレジット) 。 true
組み込み関数(出力はありません)からの出力をfilename
にリダイレクトします。
ZSH
>! filename
ZSHは、ioリダイレクト演算子>
を使用して、ファイルを不正使用から保護します。 >!
を使用すると、既存のファイルを強制的に切り捨てることができます。
ZSHにBashのリダイレクションの振る舞いを使用させたい場合は、ファイルの乱用からの保護はないので、シェルにclobber
オプションを設定する必要があります。
詳細情報: http://zsh.sourceforge.net/Doc/Release/Redirection.html
あなたがコマンドラインでvimエディタの内側からしたいのなら、これを試すことができます:
vim file.txt
押す Esc。
:1,$d
押す Enter。
すべての行が削除されています。
$ rm file.log; touch file.log
または
$ cat > file.log
control-d
が続きます。
または...または...または...
ああ。これは単一のコマンドバージョンです。
$ dd if=/dev/null of=file.log
以下のコマンドでもうまくいくはずです。
cat /dev/null > file.log
ファイルにアクセスするためにスーパーユーザー特権にSudoする必要がある場合は、承認された回答は機能しません。これを使うとうまくいく:
truncate -s0 file
またはSudoで明示的に:
Sudo truncate -s0 file
詳細はこちら http://www.commandlinefu.com/commands/view/12/empty-a-file
ファイル名にスペースがある場合は、次のようにします。
for file in /path/to/file/*; do > "$file"; done
(50の評判がないため、前の回答へのコメントに含めることはできませんでした。制限が逆になることがあります。)
いくつかの選択肢:
ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log
Bashの> filenameと同じですが、より多くのシェルで機能します(クレジット)。本当の組み込み(出力がない)からの出力をfilenameにリダイレクトします。
一度に1行?
何でもできる素敵なテキストエディタvi(m)を試してください。この場合は、行に移動してd(削除用)を押し、もう一度d(行用)を押します。
また、ファイルが複数ある場合は、次のものを使用できます。
for file in /path/to/file/*; do > $file; done
これは、同じディレクトリにあるログファイルに役立ちます。
私の許可ではこれがうまくいった唯一のものです。
touch temp.txt
Sudo mv temp.txt original-file.txt