Y a-t-il un moyen de faire un "ls" à distance comme "scp" fait une copie à distance dans un Shell linux standard ?
Réponses
Trop de publicités?Pour tous ceux qui arrivent via Google à cette question parce qu'ils cherchent un moyen de lister des fichiers distants mais ne peuvent pas accéder au serveur distant via ssh (cas courant pour les serveurs de sauvegarde), vous pouvez utiliser 'sftp'.
Ejemplo:
sftp username@hostname.xyz
ls
cd somedir
exit
Démarrer une session interactive dans un répertoire distant spécifique :
sftp [user@]host[:dir]
Comme mentionné, si vous pouvez vous connecter en SSH à l'hôte, vous pouvez faire ce que vous voulez.
Vous pouvez utiliser soit ssh user@host
ou ssh alias
(défini dans ~/.ssh/config
)
Exemples
Edit : Correction de certains exemples en mettant entre guillemets la totalité de la commande à envoyer. Merci @dave_thompson_085 d'avoir signalé le problème.
$ ssh user@host 'ls /dir/file'
Vous avez mentionné que vous ne voulez pas recevoir les erreurs de la part de ls
si le fichier n'existe pas.
Une option consiste à ignorer les messages d'erreur.
$ ssh user@host 'ls /dir/file 2>/dev/null'
Cela permettra également de préserver le rendement. Donc $?
sera 0 seulement si la commande ls a trouvé /dir/file. Cette méthode est intéressante car elle fonctionne pour les fichiers, les dossiers, les liens symboliques ou tout ce qui peut être listé par ls.
Une autre option consiste à vérifier si le fichier existe avant de l'énumérer.
$ ssh user@host '[ -f /dir/file ] && ls /dir/file'
Vous pouvez également tester et lister un dossier, mais la syntaxe change
$ ssh user@host '[ -d /dir/sub ] && ls /dir/sub'
Vous pourriez enchaîner et tester pour l'ANY aussi.
$ ssh user@host '[ -f /dir/file ] || [ -d /dir/file ] && ls /dir/file'
Vous pouvez également vérifier si l'élément existe et rien d'autre.
$ ssh user@host '[ -f /dir/file ] || [ -d /dir/file ]'
$ echo $? # exit code will be 0 ONLY if the file exists
0
Vous pouvez inclure un test pour les liens symboliques avec [ -L /my/target ]
également.
Vous pourriez exécuter des codes conditionnels à distance
$ ssh user@host '[ -f /dir/file ] && echo "File EXISTS!" || echo "File NOT FOUND!"'
File EXISTS!
Ou localement si vous déplacez les commandes en dehors de la chaîne de commande
$ ssh user@host '[ -f /dir/file ]' && echo "File EXISTS!" || echo "File NOT FOUND!"
File EXISTS!
Le mode de fonctionnement des guillemets et de l'expansion peut cependant être délicat. Si vous utilisez des guillemets doubles à l'extérieur de la commande principale (au lieu de guillemets simples comme ci-dessus), les variables seront développées AVANT de connecter ssh, à moins que vous n'échappiez à l'élément $
. Il est normalement plus facile d'utiliser des guillemets simples pour éviter cela, mais votre kilométrage peut varier. Parfois, vous avez besoin de choses qui se développent localement ET à distance, ce qui peut être délicat.
- Réponses précédentes
- Plus de réponses