Piszę skrypt, w którym zgrywam pliki.
Istnieje możliwość spakowania pliku, utworzenia pliku o tej samej nazwie i spróbowania go również zgzipować, np.
$ ls -l archive/
total 4
-rw-r--r-- 1 xyzzy xyzzy 0 Apr 16 11:29 foo
-rw-r--r-- 1 xyzzy xyzzy 24 Apr 16 11:29 foo.gz
$ gzip archive/foo
gzip: archive/foo.gz already exists; do you wish to overwrite (y or n)? n
not overwritten
Używając gzip --force
, mogę zmusić gzip do zastąpienia foo.gz
, ale w tym przypadku myślę, że istnieje duża szansa, że stracę dane, jeśli nadpisam foo.gz
. Wydaje się, że nie ma przełącznika wiersza poleceń, który zmusiłby gzip do pozostawienia .gz
plików w spokoju ... nieinteraktywna wersja naciskania 'n' po znaku zachęty.
Próbowałem gzip --noforce
i gzip --no-force
mając nadzieję, że będą one zgodne ze standardem opcji GNU, ale żadne z nich nie zadziałało.
Czy istnieje proste obejście tego problemu?
Edytować:
Okazuje się, że jest to jeden z czasów, w których opłaca się czytać stronę informacyjną, a nie stronę podręcznika.
Ze strony informacyjnej:
`--force'
`-f'
Force compression or decompression even if the file has multiple
links or the corresponding file already exists, or if the
compressed data is read from or written to a terminal. If the
input data is not in a format recognized by `gzip', and if the
option `--stdout' is also given, copy the input data without
change to the standard output: let `zcat' behave as `cat'. If
`-f' is not given, and when not running in the background, `gzip'
prompts to verify whether an existing file should be overwritten.
Na stronie podręcznika brakowało tekstu, a gdy nie działał w tle
Podczas działania w tle gzip nie wyświetli monitu i nie zastąpi, chyba że -f
zostanie wywołana opcja.
źródło
find ./ ! -name "*gz" -exec gzip {} \; &
działa:find ./ ! -name "*gz" -print0 | xargs -0 -n 1 -t gzip
gzip zgłasza:gzip: ./2012-July.txt.gz already exists; not overwritten
Odpowiedzi:
Przyszło mi do głowy, że najlepszym sposobem na uniknięcie niepożądanego efektu jest nie proszenie programu o wykonanie niepożądanego efektu. Oznacza to, że po prostu nie każ mu kompresować pliku, jeśli plik jest już w formie skompresowanej.
na przykład:
lub krótszy (uruchom,
true
jeśli istnieje plik.gz, w innym przypadku skompresuj plik)źródło
poke a file
.Najbliższa rzecz, jaką mogłem znaleźć dla pojedynczego polecenia, to:
W
yes
komenday
obserwowani przez LineFeed powinien mieć standardowe wyjście, dopóki nie otrzyma sygnału. Jeśli ma argument, wypisze go zamiasty
. W takim przypadku drukujen
do momentu wyjścia gzip, zamykając w ten sposób potok.Jest to odpowiednik
n
wielokrotnego wprowadzania na klawiaturze; to automatycznie odpowie na pytaniegzip: archive/foo.gz already exists; do you wish to overwrite (y or n)?
Ogólnie myślę, że lepiej nie próbować kompresować plików, jeśli istnieje odpowiedni plik gzip; moje rozwiązanie jest głośniejsze, ale odpowiada moim szczególnym potrzebom zastępczego
gzip
polecenia, siedząc w pliku konfiguracyjnym.źródło
gzip
wychodzi2