Chcę policzyć całkowitą liczbę wierszy we wszystkich /etc
plikach, ale nie w plikach w podkatalogach, więc wpisałem: wc -l /etc/* | tail -1
a dane wyjściowe są następujące:
xxxx is a directory
yyyy is a directory
total 1752
Moje pytanie brzmi: w jaki sposób mogę pozbyć się (usunąć) tych komentarzy i czy istnieje lepszy sposób na obliczenie tego typu?
Odpowiedzi:
Możesz wysyłać komunikaty o błędach do / dev / null
Dzięki temu poleceniu widzisz tylko liczbę linii w plikach, które można odczytać na całym świecie. Aby zobaczyć liczbę wierszy wszystkich plików, musisz podwyższyć komendę
sudo
.źródło
Izoluj pliki i uruchom na nich wc
Co
wc -l /etc/*
robi jest, że*
wzrośnie do wszystkich elementów wewnątrz/etc/
katalogu. Dlatego celem jest izolowanie plików i wykonywaniewc
na nich. Można to zrobić na kilka sposobów.dla pętli z testem
test
Poleceń, lub częściej w skrócie[
można wykorzystać do znalezienia, czy dany element jest zwykłym plikiem tak:W ten sposób możemy iterować wszystkie elementy
/etc/
i uruchamiaćwc
je wtedy i tylko wtedy, gdy powyższe polecenie zwróci wartość true. Tak jak:odnaleźć
Możemy również skorzystać
find
z-maxdepth
,-type
i-exec
flagifind /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepth
informuje, jak głęboko w strukturze katalogów iść; wartość 1 oznacza tylko pliki w wybranym przez nas katalogu.-type f
każe mu szukać zwykłych plików, LUB (reprezentowanych przez-o
flagę) dla linków sybolicznych (reprezentowanych przeztype l
). Wszystko to dobroć jest zamknięty w nawiasach()
uciekły z\
tak który interpretuje je jako powłoki części dofind
polecenia, a nie coś innego.-exec COMMAND {} +
struktura tutaj uruchamia dowolne polecenie, które mu dajemy,+
wskazując, że weźmie wszystkie znalezione pliki i umieści je jako argumenty linii poleceń w poleceniu.Aby można było łącznie wytwarzają wyjściowy do rury
tail
podobnie jakDygresja
Łatwiej jest go używać
wc -l /etc/* 2>/dev/null | tail -1
, jak w odpowiedzi LD Jamesa, jednakfind
powinien być częścią nawyku postępowania z plikami, aby uniknąć przetwarzania trudnych nazw plików. Aby uzyskać więcej informacji na ten temat, przeczytaj esej Jak poprawnie postępować z nazwami plikówźródło
find
robi to łatwo:Wynik:
ALE jeśli chcesz tylko liczbę jako wynik i nic więcej:
EDYCJA :
newlines
błąd kos powiedział, że przeważa. Tylko użycie-exec
go naprawia. Ponadto/etc
nie zawiera takich plików.Wynik:
Jak wskazuje kos , powyższe polecenie można zredukować do:
EDYCJA :
newlines
błąd kos powiedział, że przeważa. Tylko użycie-exec
go naprawia. Ponadto/etc
nie zawiera takich plików.Wynik:
źródło
-iname '*'
?find
domyślnie nie pasuje do wszystkiego?'*'
.Użycie z-shell (
zsh
), królowej powłok , zamiast bash.źródło