Dapatkan waktu modifikasi file jarak jauh melalui HTTP dalam skrip Bash

13

Saya membuat skrip Bash sederhana untuk mengekstrak waktu modifikasi / tanggal file jarak jauh melalui HTTP.

File contoh: http://example.com/bar/example.pdf

Apakah ini dapat dilakukan tanpa mengunduh file yang sebenarnya? Jika tidak, apa alternatif terbaik?

Amal Murali
sumber

Jawaban:

13

Jujur saja, tidak langsung.

Anda harus mengambil data dari situs jarak jauh untuk mendapatkan informasi tentang file tersebut. Biasanya ini dilakukan dengan HEADpermintaan, tetapi beberapa (kebanyakan?) Server belum mengimplementasikannya dengan benar dan mengirimkan seluruh file, seperti halnya melakukan GETpermintaan. Dengan asumsi bahwa Anda telah curlmenginstal:

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

mungkin memberi Anda apa yang Anda inginkan, tetapi seperti yang dikatakan, itu sangat tergantung pada server.

Karsten S.
sumber
6
"Paling"? Saya akan terkejut jika ada server HTTP populer yang melanggar protokol sedemikian rupa.
user1686
Seharusnya berubah tentu saja. Beberapa waktu yang lalu, ketika saya menangani masalah seperti itu, rasanya seperti itu. Namun, waktu berlalu. Jika Anda menemukan situs yang masih menjalankan cgi apa pun "aplikasi", kemungkinan besar itu tidak ditangani HEAD. Namun demikian, juga situs-situs tersebut akan memberi Anda hasilnya, karena mereka seharusnya memberikan segalanya.
Karsten S.
3
Saya sarankan menggunakan --headopsi daripada -X HEADyang lebih singkat sehingga perintah akan menjadi: curl -s -v --head http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'
Gautham C.
1
curl -svX HEADbahkan lebih singkat ...
Karsten S.
1
@ Hai-Malaikat Tidak, biasanya tidak ada. Wget menggunakan header If-Modified-Sejak untuk mengatakan "hei hanya kirim file itu jika ini lebih baru dari tanggal ini", maka terserah server untuk menerapkan dan menghormati header itu. Jika server berpikir bahwa file tersebut tidak berubah, ia mengirim respons 304 NOT MODIFIED.
antonagestam
12

Respons server biasanya memiliki Last-Modifiedbidang, Anda dapat memeriksanya tanpa mengunduh file. Tidak perlu digunakan -X HEAD, ada opsi khusus -Iuntuk itu ( -smenekan progres output) :

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

Juga dalam kasus saya tidak ada ikal yang diinstal (saya sedang membuat skrip untuk perangkat tertanam) , hanya wget. Cara dengan wget adalah:

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

The --server-responsecetakan header, dan --spiderpasukan pilihan untuk tidak men-download halaman, melainkan memeriksa keberadaan mereka.

Hai Malaikat
sumber
2
Ini curladalah jawaban yang lebih baik daripada yang diterima. Mungkin menggunakan grep -ikarena sering "modifikasi terakhir" memiliki kasus yang berbeda.
not2qubit
@ not2qubit thx untuk catatan, diedit.
Hi-Angel