web-dev-qa-db-fra.com

Utiliser sftp pour transférer un répertoire?

Lorsque j'essaie d'utiliser sftp pour transférer un répertoire contenant des fichiers, j'obtiens un message d'erreur:

skipping non-regular file directory_name

Le répertoire contient quelques fichiers et deux sous-répertoires.

Qu'est-ce que je fais mal?

54
haziz

sftp, comme cp et scp, nécessite que lorsque vous copiez un dossier (et son contenu, évidemment), vous devez lui dire explicitement que vous voulez transférer le dossier récursivement avec le -r option.

Alors, ajoutez -r à la commande.

53
Kevin

Je ne peux que suggérer, vous utilisez rsync. Il s'agit en quelque sorte d'une norme de l'industrie lors du déplacement de fichiers via des connexions sécurisées.

rsync -alPvz ./source_dir server.com:destination_dir

C'est ce que j'utilise depuis des années.

(le -a l'option s'occupe de choses comme la récursivité des répertoires)

23
polemon

Cela fonctionne pour moi:

1) se connecter via sftp à l'hôte distant

2) changez dans le répertoire distant que vous souhaitez copier. (Exemple: cd Musique)

3) accédez au répertoire local dans lequel vous souhaitez copier des éléments. (Exemple: lcd Desktop)

4) Exécutez cette commande: get -r *

6
Don Karon

Vous pouvez également utiliser use scp. Le format général est

scp -rp sourceDirName username@server:destDirName

scp signifie "copie sécurisée". Les drapeaux sont

  • -r recurse dans les sous-répertoires
  • -p conserver les temps de modification

Je crois que le reste des articles s'explique d'eux-mêmes

5
Bina Ramamurthy

Si rsync n'est pas une option, je recommanderais ensuite lftp:

lftp sftp://[email protected]/path/path/

Utilisez ensuite la commande mirror pour télécharger récursivement, comme ceci:

mirror -R

(Notez que la récursivité est la valeur par défaut. Le -R est pour inverse - pour que la commande miroir soit téléchargée au lieu de téléchargée. Essayez d'ajouter --dry-run pour faire un essai pour vous assurer qu'il fait ce que vous attendez.)

Ou pour télécharger sans récursivité:

mirror --no-recursion

Vous devez cd dans les répertoires que vous souhaitez mettre en miroir. Fonctionne très bien!

5
Banago

Si vous le pouvez, utilisez sshfs . C'est un système de fichiers Fuse , disponible sur la plupart des unités modernes, et fonctionne avec n'importe quel serveur SFTP. Il s'agit d'un système de fichiers distant: il vous permet de manipuler des fichiers distants (via le protocole SFTP) avec les utilitaires habituels.

mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point

Si vous vous demandez en fait "comment utiliser sftp pour transférer un répertoire", alors

 sftp -r user@server

Mais si vous transférez un répertoire, je pourrais suggérer deux meilleures options, selon vos besoins. sftp nécessite de se connecter au serveur distant dans une invite de commande de type ssh, mais si tout ce que vous voulez c'est le ou les fichiers, il existe des moyens plus simples et plus rapides.

Scp

Pour un transfert unique, pour télécharger, essayez:

 # upload source directory to remote server
 scp -rp source_dir user@server:dest

 #download directory from remote server:
 scp -rp user@server:source_dir dest

 #specifying ssh key:
 scp -rp -i ~/.ssh/key user@server:source_dir dest

 #remote directory has spaces
 scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest

Rsync

Si vous prévoyez de synchroniser les répertoires régulièrement, l'utilisation de rsync est plus logique. Il effectue des deltas entre les deux répertoires, économisant du temps de transfert et des données sur le fil.

rsync -r -a -v -e ssh --delete source_dir user@server:dest

Voici une liste de certaines des options rsync les plus courantes: ( tiré d'ici )

  • --delete - supprime les fichiers qui n'existent pas sur l'expéditeur (système)
  • -v - verbeux (-vv fournira des informations plus détaillées)
  • -e "options ssh" - spécifiez le ssh comme shell distant
  • -a - mode archive - il préserve les autorisations (propriétaires, groupes), les heures, les liens symboliques et les appareils
  • -r - recurse dans les répertoires
  • -z - compresse les données du fichier pendant le transfert
  • --exclude 'foldername' - exclut le dossier correspondant du transfert
  • -P - affiche la progression pendant le transfert

J'espère que cela pourra aider!

0
Dan Williams

vous pouvez accéder du serveur à votre chemin local en

scp -rp user@server:directoryname(full path) .
0
user368621

C'est un peu compliqué, mais ce qui fonctionne pour moi, c'est de:

  1. Utilisez ssh pour vous connecter à la machine distante
  2. Utilisez sftp de la machine distante vers votre machine locale
  3. Utilisez ensuite la commande get avec la commande -r option pour déplacer le répertoire et tous ses fichiers.
0
Matthew Greene