używanie plików skompresowanych (.gz) ze skryptami wiersza poleceń oczekującymi nieskompresowanych plików

0

Aby zaoszczędzić miejsce na dysku, zarchiwizowałem wiele moich plików, których regularnie używam. Jaki jest najlepszy sposób, aby nadal używać wersji .gz tych plików tekstowych ze, powiedzmy, skryptami python?

Mówiąc dokładniej, czy istnieje sposób na przesłanie skompresowanego pliku do skryptu, który oczekuje nieskompresowanego pliku?

Na przykład, jeśli normalnie bym uruchomił

python test.py file.txt

Jak uruchomiłbym to samo polecenie za pomocą file.txt.gz?

Wiem, że mógłbym zrobić coś takiego

gzip -dk file.txt.gz; python test.py file.txt; rm file.txt

Ale to wydaje się nieco zbyt długie; czy istnieje lepszy / szybszy sposób?

Constantino
źródło
Użyj podstawienia procesu:python test.py <(zcat file.txt.gz)
glenn jackman
jak mogę zastosować podstawienie procesu w przypadku, gdy w grę wchodzi wiele plików GZ?
Constantino
1
Nie sądzę, że jest to złe pytanie pod względem koncepcyjnym. Ale na poziomie praktycznym, jak duże są te skrypty Pythona, które kompresując je faktycznie oszczędzają miejsce na dysku? Z tanią pamięcią, dużą i jeszcze szybszą dostawą, taką jak przez USB 3.0, jaka jest faktyczna, praktyczna korzyść takiego schematu? Widzę korzyść, jeśli istniałby zautomatyzowany proces, do którego można by było przekazać to polecenie. Ale na co dzień na poziomie ludzkim? Jakie są rzeczywiste zalety takiego programu?
JakeGould

Odpowiedzi:

0

Ty też chcesz

for file in *.txt.gz; do python test.py <(zcat "$file"); done

lub

python test.py <(zcat *.txt.gz)

w zależności od tego, ile danych chcesz przekazać do programu test.py


na podstawie twojego komentarza:

proc_subs=$( printf ' <(zcat "%s")' *.txt.gz )
echo "python test.py $proc_subs -v"
#eval "python test.py $proc_subs -v"

usuń komentarz z linii eval, jeśli podoba ci się jej wygląd

Glenn Jackman
źródło
jak zmieniłbyś swoją drugą sugestię, aby obsłużyć przypadek wielu plików (na wywołanie Pythona), a także wywołanie Pythona wymagające opcji flagi logicznej. np. python test.py plik1.txt plik2.txt -v
Constantino