Mam plik dziennika zawierający wiele rzeczy, których już nie potrzebuję. Chcę wyczyścić zawartość.
Wiem, jak wydrukować zawartość na ekranie:
cat file.log
Wiem, jak edytować plik, linia po linii:
nano file.log
Ale nie chcę usuwać każdej linii pojedynczo. Czy można to zrobić za pomocą jednego polecenia bez niszczenia pliku?
linux
command-line
Andrzej
źródło
źródło
bash
jako swojej powłoki, a nie np.cmd.exe
lub PowerShell, z których żaden nie jest na tyle POSIXY, aby można było obsłużyć takie rzeczy.Możesz użyć polecenia użytkownika: obciąć
(„-s 0”, aby określić rozmiar)
http://www.commandlinefu.com/commands/view/12/empty-a-file
źródło
sudo echo > file
po prostu daje błąd w takich przypadkach.sudo bash -c '> filename'
to sposób korzystania z rozwiązań Bash w sudo.brew install truncate
na OS X z zainstalowanym Homebrew.Możesz to zrobić:
Używanie
>
do zapisu (zerowego) wejściaecho -n
do pliku.Użycie
>>
spowoduje dołączenie do pliku danych wejściowych o wartości zerowej (efektywnie nic nie robiąc, tylkotouch
je ing).źródło
true
(lub jego wbudowany alias:
), chociaż ostatecznie wcale nie potrzebujesz polecenia (zobacz zaakceptowaną odpowiedź).sudo
.Taki sam jak
> filename
w Bash, ale działa w większej ilości powłok (kredyt) . Przekierowuje wyjście ztrue
wbudowanego (który nie ma wyjścia) dofilename
.źródło
:> filename
. Czy to nie wygląda jak buźka? :>ZSH
ZSH ochroni użytkowników przed zapychaniem plików za pomocą operatora przekierowania io
>
. Jeśli używasz>!
, możesz wymusić obcięcie istniejącego pliku.Jeśli chcesz, aby ZSH używał zachowania przekierowującego Basha, gdyby nie było ochrony przed blokowaniem plików, musisz ustawić
clobber
opcję dla swojej powłoki.Więcej informacji: http://zsh.sourceforge.net/Doc/Release/Redirection.html
źródło
JEŚLI chcesz to zrobić z poziomu edytora vim w wierszu poleceń, możesz spróbować:
Prasa Esc.
Prasa Enter.
Wszystkie linie zostaną usunięte.
źródło
maillog
, nawet jejsudo > /var/log/maillog
nie wyczyściłam (odmowa zgody)sudo > /var/log/maillog
- uruchom sudo i umieść dane wyjściowe w pliku. Oczywiście stawia dane wyjściowe z bieżącymi uprawnieniami użytkownika. Łatwiej zrobić,sudo su
aby uruchomić root root, a następnie zrobić> /var/log/maillog
.lub
a następnie
control-d
.lub ... lub ... lub ...
Ach Oto wersja z jednym poleceniem:
źródło
echo "" > file.log
jest lepsza niżcat
pokazana opcja, w tej sytuacji są inne, którecat
są bardziej odpowiednie. oba używają tego samego przekierowania pocisku, aby wykonać ciężkie podnoszenie.rm
wykona zadanie utworzenia pustego pliku o tej samej nazwie. Ale to nie będzie odpowiednie dla każdego przypadku użycia.Poniższe polecenie powinno również działać:
źródło
Jeśli potrzebujesz dostępu sudo do administratora w celu uzyskania dostępu do pliku, zaakceptowana odpowiedź nie zadziała. Korzystanie z tego działa:
lub jawnie za pomocą sudo:
Więcej informacji tutaj http://www.commandlinefu.com/commands/view/12/empty-a-file
źródło
Kilka alternatyw:
źródło
Jeśli masz spacje w nazwach plików, użyj:
(Nie mogłem zawrzeć go w komentarzach do poprzedniej odpowiedzi, ponieważ nie mam 50 reputacji. Czasami ograniczenia są sprzeczne z produktywnością).
źródło
Jedna linia na raz?
Wypróbuj vi (m), piękny edytor tekstu, który potrafi wszystko. W takim przypadku przejdź do linii, naciśnij d (aby usunąć) i d ponownie (dla linii).
źródło
gg
przesuwa się na górę, aby cała sekwencja mogła byćggdG
.Z moimi uprawnieniami jest to jedyna rzecz, która działała:
źródło
Ponadto, jeśli masz wiele plików, możesz użyć następujących opcji:
Jest to pomocne w przypadku plików dziennika w tym samym katalogu.
źródło
> a.txt
To samo co> nazwa pliku w Bash, ale działa w większej liczbie powłok (kredyt). Przekierowuje dane wyjściowe z prawdziwego wbudowanego (który nie ma danych wyjściowych) do nazwy pliku.
źródło