it-swarm-eu.dev

Nahráváte adresáře pomocí sftp?

Mám nějaké potíže s nahráváním adresářů (které obsahují jiné adresáře několik úrovní hluboko) pomocí sftp. Uvědomuji si, že bych to mohl vyřešit gzipováním, ale nechápu, proč je to nutné.

Každopádně to zkusím

sftp> put bin/
Uploading bin/ to /home/earlz/blah/bin
bin/ is not a regular file
sftp> put -r bin/
Uploading bin/ to /home/earlz/blah/bin
Couldn't canonicalise: No such file or directory
Unable to canonicalise path "/home/earlz/blah/bin"

Myslím, že poslední chybová zpráva je úplně hloupá. Takže adresář neexistuje? Proč nevytvářet adresář?

Existuje přesto tento problém s sftp, nebo bych měl použít scp?

97
Earlz

OPRAVENO : Původně jsem tvrdil, že OpenSSH nepodporuje put -r. To ano, ale dělá to velmi zvláštním způsobem. Zdá se, že cílový adresář již existuje, se stejným názvem jako zdrojový adresář.

sftp> put -r source
 Uploading source/ to /home/myself/source
 Couldn't canonicalize: No such file or directory
 etc.
sftp> mkdir source
sftp> put -r source
 Uploading source/ to /home/myself/source
 Entering source/
 source/file1
 source/file2

Zvláště zvláštní je, že to platí i v případě, že k cíli zadáte jiné jméno:

sftp> put -r source dest
 Uploading source/ to /home/myself/dest
 Couldn't canonicalize: ...
sftp> mkdir dest
sftp> put -r source dest
 Uploading source/ to /home/myself/dest/source
 Couldn't canonicalize: ...
sftp> mkdir dest/source
sftp> put -r source dest
 Uploading source/ to /home/myself/dest/source
 Entering source/
 source/file1
 source/file2

Pro lépe implementovaný rekurzivní put můžete místo toho použít nástroj příkazového řádku PuTTY psftp. To je v PuTTY-tools balíček pod Debianem (a pravděpodobně Ubuntu).

Filezilla také udělá, co chcete, pokud chcete použít GUI.

68
Jander

Nevím, proč to sftp dělá, ale můžete rekurzivní kopii pouze v případě, že cílový adresář již existuje. Tak to udělejte ...

sftp> mkdir bin
sftp> put -r bin
130
Useful Dude

Možná vás bude zajímat použití rsync. Příkaz by to byl

 rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/

Toto zkopíruje vše v bin/ a umístěte jej na vzdálený server do /home/earlz/blah/bin/. Další výhodou je, že nejprve zkontroluje, zda se soubor na vzdálené straně nezměnil, a pokud tomu tak není, nebude jej znovu odesílat. Navíc můžete přidat volbu -z a zkomprimuje ji za vás.

22
Shawn J. Goff

lcd: vaše místní složka (s podsložkami)

cd: vaše vzdálená složka

put -r .

9
eliseu

Mohu navrhnout poněkud komplikovanou odpověď, bez zipu, ale včetně dehtu?

Tady jsme:

tar -cf - ./bin | ssh target.org " ( cd /home/earlz/blah ; tar -xf - ) "

Tím se zabalí adresář ./bin s tarem (-cf: = create file), filename - (none, stdout) a zavede jej příkazem ssh na target.org (což může být i IP), kde příkaz v uvozovkách se provádí: cd k bla, a tar -xf (extrahovat soubor) - žádný, žádné jméno, jen stdin.

Je to, jako kdybyste balíček zabalili doma, přivezli jej na poštu, pak odjeli do práce, kde očekáváte balíček a otevřeli jej.

Možná existuje mnohem elegantnější řešení, které používá pouze sftp.

8
user unknown

Můžete použít yafc (Přesto FTP/SFTP klienta anoter). The -r volba tam funguje velmi dobře.

2
Dmitry Shpakov

Můžete použít rsync , což je velmi výkonná alternativa pro scp a sftp, zejména při aktualizaci kopií ze stroje A na stroj B, protože to není ' • zkopírovat soubory, které nebyly změněny; je také schopen odstranit soubory ze stroje B, které byly odstraněny ze stroje A (pouze pokud je to samozřejmě řečeno).

například :

rsync -zrp /home/a/ [email protected]:/home/b/  

Možnost -r je určena pro rekurzivní kopírování souborů, -z umožňuje kompresi během přenosu a -p zachovává při kopírování oprávnění k souborům (vytváření souborů, úpravy atd.), Což scp nedělá AFAIK. Existuje mnoho dalších možností; jako obvykle si přečtěte manuálové stránky.
Původní odpověď Karolose

1
Sherlock

Přihlaste se ke vzdálenému serveru pomocí ssh, pomocí sftp se připojte zpět do vaší schránky a poté použijte get -r příkaz k přenosu adresářů na vzdálený server. Příkaz get vám umožňuje převádět adresáře rekurzivně, aniž by byl již vytvořen adresář.

ssh remote ip
sftp local ip 
get -r whichever-dir
0
Cyb3rT00th

Případ SFTP:

Potřeboval jsem zkopírovat tuto strukturu na můj ftp:

mainfolder --- folder --- subfolder
                  |           |
              file1.txt   file2.txt

To vyřešilo můj problém:

cd ./mainfolder
mkdir folder
put -r /from/source/folder/* /mainfolder/folder/
cd ./folder
mkdir subfolder
put -r /from/source/folder/subfolder/* /mainfolder/folder/subfolder/
0
Nikita Malovichko

Právě jsem se z Arch Linux Wiki dozvěděl, že je možné připojit sftp-share pomocí sshfs. Používám sftp server s chrootem a vězení a sshfs fungují velmi dobře.

  1. Mount: sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
  2. Sesednout: fusermount -u <your/local/mount/directory>
0
saltani