bash script de ezek kiszűrésére

szavazat
5

Van egy shell script. A cron job fut naponta egyszer. Abban a pillanatban csak letölt egy fájlt az internetről wget, hozzáfűz egy időbélyeget a fájlnév, majd összenyomja. Alapvető dolog.

Ez a fájl nem változik túl gyakran, szóval szeretnék megválni a letöltött fájlt, ha már létezik.

Legegyszerűbb módja ennek?

Kösz!

A kérdést 12/06/2011 13:10
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
0

Mit szólnál a fájl letöltése és ellenőrzése ellen „utolsó mentett” fájlt?

Például először letölti myfileés elmenti azt myfile-[date], és összenyomja. Azt is hozzáteszi egy szimbolikus linket, így lastfilemutatva myfile-[date]. A következő alkalommal a szkript fut, akkor ellenőrizze, ha a tartalom bármilyen lastfilepontot ugyanaz, mint az új letöltött fájlt.

Nem tudom, hogy ez jól működik, de ez az, amit én is gondolok.

Válaszolt 12/06/2011 13:20
a forrás felhasználó

szavazat
1

Számolja egy hash-t a fájl tartalmát, és ellenőrizze ellen az újat. Használja például md5sum. Csak meg kell menteni az utolsó MD5 összegét ellenőrizni, hogy a fájl megváltozott.

Emellett figyelembe kell venni, hogy a web fejlődik, hogy több információt oldalain, azaz metaadat. Egy jól megalapozott weboldal tartalmaznia kell verzióját, és / vagy a módosítás dátumát (vagy érvényes lejár fejléc) részeként a válasz fejlécét. Ez, és elég más dolog, mi teszi ki a skálázhatóság Web 2.0.

Válaszolt 12/06/2011 13:23
a forrás felhasználó

szavazat
0

Össze lehet hasonlítani az új fájlt az utolsó a összeg parancsot. Ez azon a checksum fájlt. Ha mindkét fájl azonos ellenőrző, nagyon, nagyon valószínű, hogy pontosan ugyanaz. Van egy másik nevű parancsot md5 , hogy azon a md5 ujjlenyomat , de a sumparancs minden rendszeren.

Válaszolt 12/06/2011 13:26
a forrás felhasználó

szavazat
5

Valóban szükség van, hogy tömöríteni a fájlt?
wgetrendelkezik -N, --timestamping, amely nyilvánvalóan bekapcsol időpecsételés. Hogy ez mit is mondják, hogy a fájl található www.example.com/file.txt

Az első alkalommal, amikor nem:

$ wget -N www.example.com/file.txt
[...]
[...] file.txt saved [..size..]

A következő alkalommal, olyan lesz, mint ez:

$ wget -N www.example.com/file.txt
Server file no newer than local file “file.txt” -- not retrieving.

Kivéve, ha a fájlt a szerveren frissítve.

Ez lenne megoldani a problémát, ha nem tömöríti a fájlt.
Ha tényleg kell tömöríteni, majd azt hiszem, megyek és összehasonlítjuk a hash az új fájl / archív és a régi. Ami számít ebben az esetben is, mekkora a letöltött fájlt? érdemes azt összenyomja az első, majd ellenőrzi a hash? érdemes kicsomagoláskor a régi archív és összehasonlítjuk a hash? ez jobb tárolni a régi hash egy txt fájlt? hogy minden ilyen előnyt élveznek felülírva a régi fájlt?

Csak tudni, hogy hogy néhány tesztet.


Tehát, ha megy a hash módon, úgy sha256 és xz (lzma2 algoritmus) tömörítés.
Tennék ilyet (a Bash):

newfilesum="$(wget -q www.example.com/file.txt -O- | tee file.txt | sha256sum)"
oldfilesum="$(xzcat file.txt.xz | sha256sum)"
if [[ $newfilesum != $oldfilesum ]]; then
    xz -f file.txt # overwrite with the new compressed data
else
    rm file.txt
fi

és ez kész;

Válaszolt 12/06/2011 13:39
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more