Van egy szerver, ami sftp szolgáltatást nyújt nekem.
Van egy R6 Linux gép, amin egy szkriptet faragok éppen.
A feladat az lenne, hogy egy könyvtárból letöltsek minden fájlt, egy másik könyvtárból meg az összes könyvtárat, a benne levő fájlokkal.
A gond az, hogy a forrás könyvtárba csak új dolgok kerülnek, tehát a mindent letöltök lehetne úgy, hogy egyszer mindent, utána csak a változásokat, de ezt nem tudtam eddig kitalálni, hogy legyen.
A mostani megoldás annyi, hogy:
sftp
cd egyik_könyvtár
lcd egyik_könyvtár
mget *
bye
for i in `sftp -b test.batch user@machine 2>/dev/null | grep -v "^sftp>" | sort -n | tail -5`; do
sftp <<EOF
cd ../másik_könyvtár
lcd ../másik_könyvtár
lmkdir $i
lcd $i
cd $i
mget *
bye
EOF
done
Tehát ez lehúz minden fájlt az egyikből, és az utolsó 5 könyvtárat a másikból.
Jó lenne valahogy csak az újakat.
Biztos kérdezitek, ezért mondom: csak sftp van, scp nincs, ssh nincs, rsync nincs.
- 1660 megtekintés
Hozzászólások
mount -t sshfs, majd mirrordir? rsync?
- A hozzászóláshoz be kell jelentkezni
nem vagyok root, mountolni nem tudok.
Egyébként ha nincs ssh, az nem akadályozná meg a mount -t sshfs-t?
rsync-re meg írtam, hogy nincs.
- A hozzászóláshoz be kell jelentkezni
rsync a Te baratod
- A hozzászóláshoz be kell jelentkezni
Jó kis barát az, ami nincs...
- A hozzászóláshoz be kell jelentkezni
Ez egy olyan barat, amihez nem kell specialis jogosultsag.
Fogod magad, letoltod, leforditod es utana egyutt hajtjatok a kover csajokat a faluban sorozes utan.
vagy atmasolod a binarist:
battila@igor:~$ ldd `which rsync`
linux-vdso.so.1 => (0x00007fff03f96000)
libacl.so.1 => /lib/libacl.so.1 (0x00007f5ec7796000)
libpopt.so.0 => /lib/libpopt.so.0 (0x00007f5ec758b000)
libc.so.6 => /lib/libc.so.6 (0x00007f5ec7229000)
libattr.so.1 => /lib/libattr.so.1 (0x00007f5ec7025000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5ec79bc000)
battila@igor:~$
Semmi magia. De ha nagyon kell, csinalok neked egy statikus forditast.
- A hozzászóláshoz be kell jelentkezni
Javíts ki, ha tévedek, de rsync nem csak rsh vagy ssh kapcsolaton keresztül működik?
Én eddig legalábbis csak ssh-n keresztül használtam.
Válasz, magamnak (man rsync):
Once installed, you can use rsync to any machine that you can access via a remote shell (as well as some that you can access using
the rsync daemon-mode protocol). For remote transfers, a modern rsync uses ssh for its communications, but it may have been configured to use a different remote shell by default, such as rsh or remsh.You can also specify any remote shell you like, either by using the -e command line option, or by setting the RSYNC_RSH environment variable.
Note that rsync must be installed on both the source and destination machines.
Ezzel a megközelítéssel most így két gondot látok:
1, nincs semmiféle remote shell hozzáférésem
2, a source gépen (a távoli gépen) nincs rsync.
- A hozzászóláshoz be kell jelentkezni
Szia,
jogos, ezt nem vettem figyelembe.
Van ra policy hogy nem is futtathatsz ssh-t a tavoli gepen?
Mert ha nincs, akkor akar valami magas porton futtathatsz is egyet.
Ha van, akkor marad az sshfs mountolas, es akkor lokalis konyvtarak kozott kell rsync-et csinalni (csak, hogy kossem az ebet a karohoz:) ).
- A hozzászóláshoz be kell jelentkezni
joo, latom mountolni sem tudsz.
HAt akkor ez szopas. Hakolhatsz sajat scriptet kezzel.
- A hozzászóláshoz be kell jelentkezni
Hogy futtathatnék magas porton ssh-t, ha még csak belépni se tudok arra a gépre?
Szóval hogy tiszta legyen a helyzet:
sftp hozzáférésem van.
Semmi más nincs. Azt se tudom, milyen OS, milyen hw. De egyébként is: azt mondták, fájl átvitelre sftp a használandó eljárás. Ezt a hozzáférést megadták 3 hét alatt. Nem akarok más megoldást keresni, nem akarok semmit a távoli gépen változtatni (nem is tudnék).
A kérdés arra vonatkozna csak, hogy ha csak sftp hozzáférésem van, a lokális gépen, sima felhasználóként van-e valami megoldás erre.
Pl. a könyvtárlista letöltés, és összehasonlítás, amit egeresz irt, az egy mukodokepes javaslat.
- A hozzászóláshoz be kell jelentkezni
Van fuse ftpfs is az szerintem tud sftp-t, mert a culrt használja. Bár jó lenne pontosítani mit értesz sftp alatt.
- A hozzászóláshoz be kell jelentkezni
Az FTP over SSL, amire te gondolsz, az FTPS. Az SFTP az az SSH ftp-je.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
hat, ha nincs rsync, ami pont erre valo, akkor implementaljunk egy rsync-et.
mondjuk meret es timestamp alapjan dontsuk el egy file-rol, hogy valtozott-e vagy sem.
ehez az
sftp >/tmp/dirlist <<EOF
ls -la
EOF
kombinaciot lehet hasznalni.
El kell kesziteni a lokalis dirrectoryrol is a hasonlo listat.
diff-et kell csinalni, hogy mi az, ami csak a tavoli listaban van.
Az igy kapott file-oket kell lehzuni.
Ez azert szep melo, nem hiba irtak meg az rsync-et
- A hozzászóláshoz be kell jelentkezni
köszi
- A hozzászóláshoz be kell jelentkezni
most igy alaposan vegiggondolva, megsem javaslom neked, hogy ket hetet kodolj.
Lokalis gehez teljes jogod van, ugye?
- lokalis gepen fuse installalasa
- valami olyan fuse alapu fs, ami kepes sftp backendre, fentebb volt par pelda
ezzel kepes vagy letrehozni azt, hogy a lokalis gepen a tavoli gep (sftp-n elert) cucca mint lokalis filesystem latszodjon. Olyan lassan, ahogy az sftp megy.
- lokalis gepen rsync installalasa
es akkor a lokalis gepen a ket lokalisnak latszo filesystem kozott masolsz rsync -cel. Az rsync megoldja azt a problemat, hogy csak az ujabbakat mozgassa at, a fuse+sftpfs meg azt, hogy lovat ad az rsync ala. Igy sikerult a problemat rendszergazdai dolgokkal megoldani.
- A hozzászóláshoz be kell jelentkezni
nincs teljes jogom a lokalis gephez. Van egy sima felhasznalom, es kesz.
- A hozzászóláshoz be kell jelentkezni
végül pár óra során lett egy ilyen megoldás:
ls -1 OPEN* | sort >local.ls
sftp sftp@sftp_gate 2>/dev/null <" | sort >remote.ls
ls -1 OPEN*
bye
EOF
letoltendo=`diff -b local.ls remote.ls | grep "^>" | sed "s/^> //"`
for i in $letoltendo; do
sftp sftp@sftp_gate << EOF
get $i
bye
EOF
done
rm *.ls
- A hozzászóláshoz be kell jelentkezni
Tudd be kérlek naívságom annak, hogy alig látok a takonytól, de:
sima parancsokat tudsz kiadni a távoli gépen?
# cd innen_indulj
# touch timestamp_file
... lehúzol mindent ...
majd legközelebb
# cd innen_indulj
# find . -type f -newerm timestamp_file > lehuzni.lst
majd ezt a lehuzni.lst-t megeteted az sftp-vel valahogy
a végén pedig
# touch timestamp_file
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
nem tudok parancsokat futtatni a távoli gépen, csak amit az sftp enged.
A távoli könyvtárstruktúra egyébként azt hiszem, R/O módon van számomra kiajánlva, mindenesetre az az elvárás, hogy ne módosítsak ott semmit.
Ettől persze még amit írsz, lokális timestamp fájllal még akár működhet is.
- A hozzászóláshoz be kell jelentkezni
Találtam közben egy megoldást: itt. Mondjuk ő csak csv fájlokat akar, de ezt átfaragva szerintem képes lesz azt csinálni, amit szeretnél.
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni