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?
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.
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)
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 *
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 modificationJe crois que le reste des articles s'explique d'eux-mêmes
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!
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 )
J'espère que cela pourra aider!
vous pouvez accéder du serveur à votre chemin local en
scp -rp user@server:directoryname(full path) .
C'est un peu compliqué, mais ce qui fonctionne pour moi, c'est de:
ssh
pour vous connecter à la machine distantesftp
de la machine distante vers votre machine localeget
avec la commande -r
option pour déplacer le répertoire et tous ses fichiers.