107 votes

Existe-t-il un moyen de faire un "ls" à distance comme "scp" fait une copie à distance ?

Y a-t-il un moyen de faire un "ls" à distance comme "scp" fait une copie à distance dans un Shell linux standard ?

125voto

Robin like the bird Points 166

Vous pouvez toujours faire ça :

ssh user@host ls -l /some/directory

Il se connectera à l'hôte, exécutera ls, vous renverra la sortie et se déconnectera immédiatement.

23voto

Black Rock Onyx Points 181

Pour lister tous les fichiers d'un répertoire :

rsync host.name.com:directory/path/'*'

Pour quelque chose comme find directory/path -ls

rsync -r host.name.com:directory/path

14voto

tobltobs Points 169

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]

4voto

Andrew M. Points 10852

Oui. SSH et faites un ls :

ssh host ls /path

Vous pourriez facilement script ceci pour être plus flexible, ou utiliser la syntaxe host:path scp utilise.

2voto

Gus Neves Points 111

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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X