Muszę oddzielnie rozpakować wszystkie pliki w katalogu, w tym wszystkie pliki w podkatalogach, bez późniejszego usuwania oryginałów. Powiedzmy, że mam index.html, chcę mieć na końcu index.html.gzip ORAZ index.html.
Jestem w stanie zgzipować wszystkie pliki w moim katalogu poprzez
gzip -r .
Ale chcę również zachować oryginalne pliki.
czy to możliwe?
*.*
wls
?*.*
pasuje do wszystkich plików o regularnych nazwach i zwykle nie ma katalogów. Oczywiście działa tylko w większości przypadków i zwykle nie, jeśli jest to potrzebne. Następnie użyjfind
polecenia.ls *.*
nie wybiera plików takich jak TODO .ls
nie jest potrzebna w ogóle :for x in *
. Jednak używaniefind
powinno byćfind . -type f | while read -r x
.-r
włączenieread
.Możesz łatwo to zmienić, aby uwzględnić to, co chcesz skompresować (
-name '*.txt -or -name '*.html
itp.) Zamiast teraz, z wyłączeniem niektórych plików (już skompresowanych, kopii zapasowych i plików tymczasowych).Dobrze radzi sobie również ze spacjami w nazwie pliku.
Zmień
gzip
naecho gzip
do testowania. Lub pomiń część -exec razem.Edycja: Och, zapomniałem wspomnieć, że to nie sprawdza, czy
<target>.gz
już istnieje. Może to stanowić problem.Edycja2: Ok, zaczynamy od czegoś, co sprawdza istniejący plik. Jeśli to może być potrzebne. Przebacz oneliney-ness.
Moje
find
-foo może nie jest tym, czym mogłoby być, bardzo możliwe, że można pominąć bezpośrednio w znalezieniu.źródło
Po prostu dodaj opcję -c, myślę, że to powinno działać
źródło
gzip 1.6 (czerwiec 2013) dodał
-k, --keep
opcję, więc teraz możesz:Znalezione na: /unix/46786/how-to-tell-gzip-to-keep-original-file
źródło
Testowane na Debianie (gzip 1.3.12-6)
źródło
ls
jest niepotrzebne, użyj*
.