pliki wyszukiwania i zip?

1
$ ls -lrt *.extract.sys 
-rw-r--r--   1 sftwrk01   test       1729455 Dec 01 21:21 ar.ARAB-PI_3.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1684929 Dec 30 21:21 ar.ARAB-PI_5.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1696332 Dec 30 21:21 ar.ARAB-PI_1.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1726197 Dec 30 21:21 ar.ARAB-PI_7.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1692531 Dec 03 21:21 ar.ARAB-PI_2.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1606737 Dec 30 21:21 ar.ARAB-PI_0.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1803846 Dec 30 21:21 ar.ARAB-PI_8.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1689816 Jan 30 21:21 ar.ARAB-PI_9.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1724025 Jan 30 21:21 ar.ARAB-PI_6.20101231.extract.sys
....

Muszę spakować pliki w grudniu.

Do tej pory próbowałem poniżej i nie zadziałało

$ ls -lrt *.extract.sys | grep Dec | gzip            
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h

Proszę pomóż

munish
źródło

Odpowiedzi:

1

Zakładając, że chcesz skompresować rzeczywistą zawartość pliku, a nie tylko listę, musisz skompresować archiwum tar przed kompresowaniem za pomocą GZip. Ponadto użycie find może być bardziej niezawodne niż wyjście grepping ls.

Najpierw utwórz pliki znaczników z datami reprezentującymi początek i koniec grudnia, następnie znajdź wszystkie pliki z czasami modyfikacji między tymi dwoma plikami i użyj xargs z tar do ich spakowania i wysłania do GZip. Oto jak to się robi:

  touch -t 201012010000 start
  touch -t 201101010000 end
  find . -iname \*.extract.sys -newer start \! -newer end -print0 | xargs -0 tar czvf dec.tar.gz
  rm start
  rm end

Upewnij się, że w katalogu nie ma ważnych plików zwanych „start” i „end”! Jeśli tak, użyj innych nazw lub umieść pliki znaczników na przykład w / tmp.

Należy również zauważyć, że wszystkie podkatalogi o nazwach pasujących do „* .extract.sys” również zostaną skompresowane. Jeśli nie jest to potrzebne, dodaj te flagi, aby znaleźć: -type f -depth 1

jjrv
źródło
@jjrv: Zasugeruj użycie -print0 w poleceniu find i -0 w komendzie xargs, aby poprawnie obsługiwać białe znaki w nazwach plików.
Tom Shaw
@ Tom Shaw: Dzięki, dodał. OS X ma do obsługi ucieczki rzeczy -X, GNU najwyraźniej nie.
@jjrv: Również to podejście nie powiedzie się, jeśli jest zbyt wiele nazw plików, w którym to przypadku xargs uruchomi tar kilka razy i nadpisze archiwum. Prawdopodobnie lepszym rozwiązaniem jest użycie pax, które pozwala funkcjonalności cpio na odczyt nazw plików na standardowym wyjściu.
Tom Shaw
co to jest \!
munish
@ Munish: Oznacza to „nie”, tj. „nie nowszy niż”
Tom Shaw
1

Próbujesz kompresować nazwy plików zamiast plików. Nie wysyłaj gzipów nazw plików na standardowe wyjście, wysyłaj je jako argumenty.

sverre
źródło
Tak, dostaję to @sverre, jak byś to zrobił
munish