Pracuję nad SunOS 5.10. Mam folder zawierający około 200 plików zip. Każdy plik zip zawiera tylko jeden plik tekstowy. Chciałbym wyszukać określony ciąg we wszystkich plikach tekstowych we wszystkich plikach zip.
Próbowałem tego (który szuka dowolnego pliku tekstowego w pliku zip, który zawiera ciąg „ORA-”), ale nie zadziałało.
zipgrep ORA-1680 *.zip
Co jest poprawne, robiąc to bez rozpakowywania plików zip?
Odpowiedzi:
Zasadniczo wyszukiwanie zawartości w skompresowanym pliku nie jest możliwe bez jego dekompresji. Ponieważ zipgrep jest tylko skryptem powłoki, rozpakowującym rozpakowanie i samo egrep, równie dobrze możesz to zrobić ręcznie:
Jeśli potrzebujesz tylko listy pasujących plików zip, możesz użyć czegoś takiego:
W ten sposób dekompresujesz tylko do standardowego wyjścia (tj. Do pamięci) zamiast dekompresować pliki na dysk. Możesz oczywiście spróbować po prostu
grep -a
zapisać pliki zip, ale w zależności od zawartości pliku i wzorca możesz uzyskać fałszywie pozytywne i / lub fałszywe negatywy.źródło
unzip -c
dekompresuje plik na standardowe wyjście. Nigdzie indziej nie zapisuje całego nieskompresowanego pliku.unzip
zastosowań-p
do przesyłania strumieniowego do potoku!zipgrep
pobiera pojedynczy plik. Aby działał na wielu plikach, umieść go w pętli:źródło
for i in *.zip; do zipgrep TextToSearch $i && echo $i; done
System plików AVFS przedstawia widok systemu plików, w którym każdy plik archiwum
/path/to/foo.zip
jest dostępny jako katalog~/.avfs/path/to/foo.zip#
. Jest to system plików FUSE , który można zainstalować w systemie Solaris. AVFS zapewnia dostęp tylko do odczytu do najpopularniejszych formatów plików archiwów.źródło