Plusieurs fois par jour, il se peut que je lance un test pour lequel je dois consulter un fichier journal sur un serveur distant. Je me suis habitué à utiliser mon terminal pour sftp
sur le serveur distant et extraire le fichier journal souhaité jusqu'à /tmp
Sur ma machine locale.
Aujourd'hui, je parcourais les options en utilisant man sftp
Pour tenter de trouver un moyen d'exécuter les commandes suivantes essentiellement sur une seule ligne afin d'éviter de devoir taper une commande, d'appuyer sur entrée, de taper une commande appuyez sur enter, etc.
(ce que je fais maintenant)
sftp myuser@myserver
--mypassword at Prompt
lcd /tmp
get /dir/dir/dir/dir/file
quit
En cherchant dans man sftp
, J'ai trouvé une référence à scp
que je n'avais pas utilisée auparavant. Je pense que c'est peut-être ce que je recherche, mais je n'ai pas trouvé de moyen de spécifier où je voulais que le fichier copié en toute sécurité aille.
Quelqu'un pourrait-il me fournir un moyen d'obtenir /dir/file
D'un serveur distant et de le télécharger sur /tmp/file_plus-my-description
?
J'espérais pouvoir exécuter une commande sftp ou scp similaire à une copie UNIX classique telle que:
scp myuser@myserver /dir/file /tmp/file_plus-my-description
J'utilise le Terminal
intégré dans Mac OS X 10.8. Merci.
Mise à jour septembre 2017 - tl; dr
Télécharger un seul fichier d'un serveur FTP distant sur votre machine:
sftp {user}@{Host}:{remoteFileName} {localFileName}
Upload un seul fichier de votre machine vers un serveur ftp distant:
sftp {user}@{Host}:{remote_dir} <<< $'put {local_file_path}'
Réponse originale:
Ok, alors je me sens un peu bête. Mais je l'ai compris. Je l'ai presque eu au sommet avec:
sftp user@Host remoteFile localFile
La seule documentation affichée dans le terminal est la suivante:
sftp [user@]Host[:file ...]
sftp [user@]Host[:dir[/]]
Cependant, je suis tombé sur ce site qui montre ce qui suit dans le synopsis:
sftp [-vC1 ] [-b batchfile ] [-o ssh_option ] [-s subsystem | sftp_server ] [-B buffer_size ] [-F ssh_config ] [-P sftp_server path ] [-R num_requests ] [-S program ] Host
sftp [[user@]Host[:file [file]]]
sftp [[user@]Host[:dir[/]]]
Donc, la réponse simple est que vous ne faites que :
après votre utilisateur et votre hôte, le fichier distant et le nom de fichier local. Incroyablement simple!
Une seule ligne, fichier distant de copie sftp:
sftp username@hostname:remoteFileName localFileName
sftp kyle@kylesserver:/tmp/myLogFile.log /tmp/fileNameToUseLocally.log
Mise à jour février 2016
Si quelqu'un cherche la commande pour faire l'inverse de ceci et Push un fichier de votre ordinateur local à un serveur distant en une seule ligne sftp
commande, utilisateur @Thariama ci-dessous affiché la solution pour y parvenir. Chapeau pointe pour eux pour le code supplémentaire.
sftp {user}@{Host}:{remote_dir} <<< $'put {local_file_path}'
Pour charger un seul fichier, vous devez créer un script bash. Quelque chose comme ce qui suit devrait fonctionner sous OS X si vous avez installé sshpass
.
Usage:
sftpx <password> <user@hostname> <localfile> <remotefile>
Mettez ce script quelque part dans votre chemin et appelez-le sftpx
:
#!/bin/bash
export RND=`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32`
export TMPDIR=/tmp/$RND
export FILENAME=$(basename "$4")
export DSTDIR=$(dirname "$4")
mkdir $TMPDIR
cp "$3" $TMPDIR/$FILENAME
export SSHPASS=$1
sshpass -e sftp -oBatchMode=no -b - $2 << !
lcd $TMPDIR
cd $DSTDIR
put $FILENAME
bye
!
rm $TMPDIR/$FILENAME
rmdir $TMPDIR
sftp prend en charge les fichiers de commandes.
De la page de manuel:
-b batchfile
Batch mode reads a series of commands from an input batchfile instead of stdin.
Since it lacks user interaction it should be used in conjunction with non-interactive
authentication. A batchfile of `-' may be used to indicate standard input. sftp
will abort if any of the following commands fail: get, put, rename, ln, rm, mkdir,
chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, and lmkdir. Termination
on error can be suppressed on a command by command basis by prefixing the command
with a `-' character (for example, -rm /tmp/blah*).