2010-01-01 01:50:57 +0000 2010-01-01 01:50:57 +0000
297
297

Jak wyczyścić zawartość pliku z linii poleceń?

Mam plik dziennika, który ma w sobie mnóstwo rzeczy, których już nie potrzebuję. Chcę wyczyścić zawartość pliku.

Wiem jak wydrukować zawartość na ekranie:

cat file.log

Wiem jak edytować plik, linia po linii:

nano file.log

Ale nie chcę usuwać każdego wiersza po kolei. Czy jest jakiś sposób, aby zrobić to w jednej komendzie bez niszczenia pliku, aby to zrobić?

Odpowiedzi (14)

488
488
488
2010-01-01 10:20:23 +0000

In bash, just

> filename

This will leave you with an empty file filename.

p.s.

If you need sudo call, please consider to use truncate as answered here .

133
133
133
2013-08-20 14:21:43 +0000

Możesz użyć polecenia użytkownika : obetnij

truncate -s 0 test.txt

(“-s 0” aby określić rozmiar) http://www.commandlinefu.com/commands/view/12/empty-a-file

35
35
35
2010-01-01 01:55:01 +0000

Możesz to zrobić:

echo -n "" > file.log

Używanie > do zapisu (zerowego) wejścia z echo -n do pliku.

Używanie >> dodałoby do pliku _neutralne wejście (efektywnie nie robiąc nic poza touchingiem).

30
30
30
2014-07-25 22:51:07 +0000
: > file.log

Tak samo jak > filename w Bashu, ale działa w większej ilości powłok (kredyt) . Przekierowuje wyjście z wbudowanego true (który nie ma wyjścia) do filename.

11
11
11
2012-12-06 20:48:34 +0000

ZSH

>! filename

ZSH będzie chronić użytkowników przed zbrylaniem plików za pomocą operatora przekierowania io >. Jeśli używasz >!, możesz wymusić obcinanie istniejącego pliku.

Jeśli chcesz, aby ZSH używał zachowania przekierowania Bash'a, jeśli nie ma ochrony przed plątaniną plików, musisz ustawić opcję clobber dla swojej powłoki.

Więcej informacji: http://zsh.sourceforge.net/Doc/Release/Redirection.html

9
9
9
2012-09-12 18:21:28 +0000

Jeśli chcesz zrobić to z wnętrza edytora vima w linii poleceń, możesz spróbować:

vim file.txt

Naciśnij klawisz Esc.

:1,$d

Naciśnij Enter.

Wszystkie linie zostaną usunięte.

4
4
4
2016-05-10 12:45:57 +0000

Poniższe polecenie również powinno zadziałać :

cat /dev/null > file.log
4
4
4
2010-01-01 01:59:43 +0000
$ rm file.log; touch file.log

lub

$ cat > file.log

a następnie control-d.

lub…lub…lub…lub…

Ah. Here is a single command version:

$ dd if=/dev/null of=file.log
2
2
2
2015-01-30 19:11:35 +0000

Jeśli potrzebujesz sudo do uprawnienia superużytkownika, aby uzyskać dostęp do pliku, zaakceptowana odpowiedź nie będzie działać. Korzystanie z tego działa:

truncate -s0 file

lub wyraźnie z sudo:

sudo truncate -s0 file

Więcej informacji tutaj http://www.commandlinefu.com/commands/view/12/empty-a-file

1
1
1
2018-03-15 09:36:54 +0000

Jeśli masz spacje w nazwach plików, użyj:

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

(nie mogłem umieścić tego w komentarzach do poprzedniej odpowiedzi, ponieważ nie mam 50 reputacji. Czasami ograniczenia są kontra produktywne).

1
1
1
2015-10-25 22:27:56 +0000

Niewiele alternatyw:

ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log
0
0
0
2016-06-22 16:35:06 +0000

Ponadto, jeśli masz wiele plików, możesz użyć następujących:

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

To jest pomocne dla plików dziennika w tym samym katalogu.

0
0
0
2010-01-01 03:14:40 +0000

Jedna linia na raz?

Spróbuj vi(m), uroczego edytora tekstu, który może zrobić wszystko. W tym przypadku, przejdź do linii, naciśnij d (dla usunięcia), i d ponownie (dla linii).

0
0
0
2014-03-04 00:10:08 +0000

Z moimi uprawnieniami to jedyna rzecz, która zadziałała:

touch temp.txt
sudo mv temp.txt original-file.txt