Tömörített fájlokban grep

Fórumok

Sziasztok,

Több száz, tömörített (gz, 7z, rar, stb.) és sima szöveg fájlt kellene átvizsgálnom rendszeresen, elemezni stb, de nem szeretném mindig kibontani őket. (Ubuntu alatt)

Tudtok olyan megoldásról ami grep és ennek megfelel?

zgrep-et próbáltam, de nem kezel 7z, és rar-t.

Szeretném elkerülni a keressek fájlokat és kibontom és utána grep megoldásokat.

Hozzászólások

>> Szeretném elkerülni a keressek fájlokat és kibontom és utána grep megoldásokat.

 

miért, a zgrep/bzgrep/xzgrep/... wrapper scriptek szerinted mit csinálnak?

Gondolom van olyan módszer, ami röptében RAM-ba kicsomagolja az adatot, és ott greppeli blokkosan, nem pedig az egészet diszkre kicsomagolás után greppel. Egyik előnye h. nem foglal diszk helyet, cserébe minden keresésnél ki kell tömöríteni az adatot így sok ismétlés esetén lassabb. Másik módszernél viszont le kell tárolni diszkre a kitömörítetlen adatot mielőtt keresni lehetne benne. Cserébe a sokadik keresésnél már nem kell ismételten kitömöríteni az adatot, csak a grep-nek kell dolgoznia.

A tömörítvényekben egy, vagy több fájl van?

Amúgy tippem szerint egy jól megírt shell-script pont a szükséges STDOUT-ra dekompresszort hívja meg és PIPE-on (azaz memórián) keresztül odaadja a grep-nek. De hogy kissé erősen zabálja a CPU-t, háááát - a fene tudja.

Tegyük fel nem bonyolítod opciókkal, csal simán 'decompgrep "minta" fájlok' formában akarod meghívni - ekkor kb. ennyi, megfelelően kiegészítve az összes elérhető tömörítővel (pack / compress / gzip / (un)zip / lha / (un)arj / un(arj) / .... )

minta="$1" ; shift

case i # ez a maradék paramétereken megy végig

*.gz ) gzip -dc "$i" ;;

*.rar) unrar p "$i" ;;

*.arj) unarj # NO ÉN NEM TALÁLTAM STDOUT-ra opciót - nem OK

*.7z) 7z e -bd -so "$i" ;;

*.zip ) unzip -p "$i" ;;

*) cat "$i" ;;

esac | grep "$minta"


find $sourceDir -type f -print0 | while IFS= read -r -d '' file; do
        ext=${file##*.}
        echo "Scan:" $file " extension is:" $ext
        echo $file >> scanned_files.log
        case $ext in
                (txt) cat "$file" | grep $PT -oE >> scan_log.txt;;
                (rar) unrar p "$file" | grep $PT -oE >> scan_log.txt;;
                (zip) unzip -p "$file" | grep $PT -oE >> scan_log.txt;;
                (7z) 7z e -bd -so "$file" | grep $PT -oE >> scan_log.txt;;
                (gz) gzip -dc "$file" | grep $PT -oE >> scan_log.txt;;
                (*) echo "# ERROR -- $file" >> not_scanned_files.log;;
        esac
done


Most jelenleg ez lett a "megoldás". Kicseréltem 1-2 csomagolási paramétert Zahy megoldása alapján.
De pl rar otthagyja a kicsomagolt fájlokat.