2012-08-08 9 views

Odpowiedz

17

Można po prostu umieścić swoje wezwanie do curl wewnątrz if bloku:

if ! [ -f /home/$outputfile ]; then 
    curl -o /home/$outputfile "url" 
fi 

Należy również zauważyć, że w przykładzie, masz $url wewnątrz apostrofami , który nie zrobi tego, co chcesz. Porównaj:

echo '$HOME' 

Do:

echo "$HOME" 

Również curl posiada opcję --silent które mogą być przydatne w skryptach.

+0

Bardzo pomocne, dziękuję za wskazanie tego. ale robię to przez php, jak mogę uruchomić to, jeśli oświadczenie za pośrednictwem php? – thevoipman

+0

Nie wiem, PHP z góry mojej głowy, ale jestem pewien, że ma stosunkowo prosty mechanizm sprawdzania, czy plik istnieje. –

4

użyć wget z --no-clobber Zamiast:

-nc, --no-clobber: przejście do pobrania, które pobrać do istniejących plików.

Przykład:

wget -nc -q -O "/home/$outputfile" "$url" 
+1

czy mógłbyś wskazać mi, jak korzystać z wget? – thevoipman

+2

Początkowo używałem wget, ale potem zmieniłem na curl, ponieważ chciałem, aby nowo pobrany plik miał znacznik czasu, kiedy został pobrany. używając wget, nie generuje on nowego znacznika czasu, ale zamiast tego jakikolwiek znacznik czasu pochodzi ze źródła, które skopiował. w jaki sposób mam wget generowanie nowych znaczników czasu? – thevoipman

+0

'-N' wyłącza znacznik czasu w wget. –

1

curl może wspierać omijając pliki kiedy go używać z -O i -J, ale jego zachowanie jest niespójne.

-J (--remote-header-name) w zasadzie opowiada (--remote-name) opcję -O korzystania z serwera określonym Content-Disposition pliku zamiast wyodrębnianie pliku z adresu URL. W ten sposób curl tak naprawdę nie wie, jaką nazwę pliku zwróci serwer, więc może zignorować istniejący plik ze względu na bezpieczeństwo.

Źródło: Re: -J "Refusing to overwrite..."

Na przykład:

$ curl -LJO -H 'Accept: application/octet-stream' 'https://api.github.com/repos/x/y/releases/assets/12345 
Warning: Refusing to overwrite my_file.bin: File 
Warning: exists 
curl: (23) Failed writing body (0 != 16384) 

Jednak jak już wspomniano, jego zachowanie jest nieprzewidywalne i to nie działa dla wszystkich plików.

2

Można użyć opcji zwijania -C -. Ta opcja służy do wznowienia zepsutego pobierania, ale pominie pobieranie, jeśli plik jest już gotowy. Zauważ, że argument do -C jest pojedynczym myślnikiem. Wadą może być to, że curl nadal krótko kontaktuje się z serwerem zdalnym, aby poprosić o rozmiar pliku.

Powiązane problemy