Możesz po prostu zrobić:
gzip *
gzip powie ci, że pomija pliki, które już mają .gz
zakończenie.
Jeśli ten komunikat przeszkadza, możesz użyć:
gzip -q *
To, co próbowałeś, nie zadziałało, ponieważ gzip
nie odczytuje nazw plików do skompresowania ze standardowego wejścia, aby to zadziałało, musisz użyć:
ls | grep -v gz | xargs gzip
Wykluczysz pliki ze wzorcem w gz
dowolnym miejscu w nazwie pliku, nie tylko na końcu .¹ Trzeba także pamiętać, że analizowanie wyniku ls
jest niebezpieczne, jeśli masz nazwy plików ze spacjami, znakami nowej linii itp.
Bardziej czystym rozwiązaniem, nie polegającym na gzip
pomijaniu plików z .gz
zakończeniem, jest także obsługa plików nieskompresowanych w podkatalogach:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Jak izkata
skomentowano: użycie .gz
samego w celu poprawy tego nie zadziałałoby. Musisz użyć grep -vF .gz
lubgrep -v '\.gz$'
. Nadal pozostawia to niebezpieczeństwo przetwarzania ls
produkcji
$
aby było wyraźniejsze. I tak nie.
uciekłeś, więc będzie to wykluczać tylko te pliki, które zaczynają sięgz
od (ponieważ nie mają wcześniej „żadnej postacigz
”)$
wykluczeniem (-v
) wszystkich plików o nazwach składających się z trzech lub więcej znaków, w tym dowolnego znaku, po którym następuje „gz” w dowolnym miejscu w nazwie pliku. Będzie więc zawierać pliki o nazwach rozpoczynających się od „gz”.gz
dowolnym miejscem w nazwie (oprócz początku). Więc i tak lepiej to zakotwiczyć. Gdy nie używał$
, czytał tak, jakbyś nie zdawał sobie sprawy, co.
oznacza wyrażenie regularne, stąd reszta mylącego komentarza.