Bash komut dosyasında HTTP üzerinden uzak dosyanın değişiklik zamanını alma


13

HTTP aracılığıyla uzak bir dosyanın dosya değişiklik zamanını / tarihini ayıklamak için basit bir Bash komut dosyası oluşturuyorum.

Örnek dosya: http://example.com/bar/example.pdf

Bu Yapılabilir olmadan gerçek dosyayı indirirken? Değilse, en iyi alternatif nedir?

Yanıtlar:


13

Dürüst olmak gerekirse, doğrudan değil.

Dosya hakkında bilgi almak için uzak siteden veri almanız gerekir. Genellikle bu bir HEADistekle yapılır , ancak bazı (en çok?) Sunucular isteği doğru bir şekilde uygulamamış ve tüm GETistekleri iletir. curlYüklediğinizi varsayarsak :

curl -s -v -X HEAD http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'

size istediğinizi verebilir, ancak söylendiği gibi sunucuya bağlıdır.


6
"Çoğu"? Popüler HTTP sunucularından herhangi biri protokolü bu şekilde ihlal ederse şaşırırdım.
user1686

Elbette değişmiş olmalıydı. Bir süre önce, bu tür sorunlarla uğraştığımda, böyleydi. Ancak, zaman geçer. Hala "uygulamalar" ne olursa olsun cgi çalıştıran siteler bulursanız, büyük olasılıkla işlemezler HEAD. Yine de, bu siteler size sonuç verecektir, çünkü onlar her şeyi teslim gerekiyordu.
Karsten S.

3
--headSeçeneği -X HEADdaha keskin yapmak yerine kullanmanızı öneririm, böylece komut şöyle olur: curl -s -v --head http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'
Gautham C.

1
curl -svX HEADHatta daha kısa ve öz ... olduğunu
Karsten S.

1
@ Hi-Angel Hayır, genellikle yoktur. Wget, "hey bu dosyayı yalnızca bu tarihten daha yeni olduğunda gönder" demek için If-Modified-Since üstbilgisini kullanır, daha sonra bu üstbilgiyi uygulamak ve saygı duymak sunucuya bağlıdır. Sunucu dosyanın değişmediğini düşünürse, 304 DEĞİŞTİRİLMEMİŞ yanıtı gönderir.
antonagestam

12

Sunucu yanıtı genellikle Last-Modifiedalana sahiptir, dosyayı indirmeden kontrol edebilirsiniz. Kullanmanıza gerek yok -X HEAD, bunun için özel bir seçenek -Ivar ( -silerleme çıktısını bastırır) :

curl -sI http://example.com/bar/example.pdf | grep -i Last-Modified

Ayrıca benim durumumda yüklü bir bukle var (Ben gömülü bir cihaz için bir komut dosyası yapıyorum) sadece wget. Wget ile yol:

wget --server-response --spider http://example.com/bar/example.pdf 2>&1 | grep -i Last-Modified

--server-responseBaskılar başlıkları ve --spideropsiyon kuvvetleri sayfalarını indirmek değil, onların varlığını kontrol etmek.


2
Bu curl, kabul edilenden daha iyi bir cevaptır. Belki de grep -isık sık kullanılan "son değiştirilmiş" farklı bir durum vardır.
not2qubit

Not için @ not2qubit thx düzenlendi.
Hi-Angel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.