J'exécute scp et je copie un dossier à partir d'un serveur distant, j'exécute avec -rl, donc je vois les fichiers en cours de copie, est-il possible de sauter le fichier actuel d'une manière ou d'une autre?
J'exécute scp et je copie un dossier à partir d'un serveur distant, j'exécute avec -rl, donc je vois les fichiers en cours de copie, est-il possible de sauter le fichier actuel d'une manière ou d'une autre?
Réponses:
Non tu ne peux pas. Mais vous pouvez arrêter scp
et utiliser à la rsync
place. Il ne copiera que les différences laissées par la copie partielle et vous pouvez exclure tous les fichiers ou répertoires que vous ne souhaitez pas transférer.
rsync -avP -e ssh --exclude=somefile --exclude=somedir ./localdir/ user@server:remotedir/
Non, pas avec -r
ou toute autre syntaxe qui effectue plusieurs transferts de fichiers dans une seule scp
commande.
Cela dit, scp
suit également le paradigme UNIX: écrire des programmes qui fournissent des fonctionnalités simples et précises qui peuvent être enchaînées de manière intéressante. Cela signifie qu'il serait possible d'écrire une boucle qui effectue de manière interactive des invocations individuelles de la commande, une par fichier. Vous pourrez alors sortir des commandes individuelles pendant leur exécution. (Ctrl-C)
Le code pour cela est laissé au lecteur comme exercice, mais la nécessité pour cette boucle de s'exécuter dans un shell interactif doit être soulignée. Sortir d'un shell non interactif mettrait fin à tout le travail.
Oui, vous pouvez!
Listons le répertoire distant et copions chaque fichier séparément. Appuyez ensuite sur ctrl-c pour chaque fichier que vous ne souhaitez pas copier:
OLD_IFS="$IFS"
IFS=$'\n'
for file in `ssh user@host ls /remote/directory/`
do echo user@host:/remote/directory/$file /local/directory/
done;
IFS="$OLD_IFS"
OLD_IFS est là pour gérer les fichiers contenant des espaces.