Comment copier tous les fichiers dun répertoire vers un répertoire distant à laide de scp?

Mon objectif est de copier uniquement tous les fichiers de ~ / local_dir à [email protected] / var / www / html / target_dir en utilisant scp et ne créez pas de catégorie local_dir dans local_dir.

/var/www/html/target_dir/files.. 

mais pas

/var/www/html/target_dir/local_dir/files.. lorsque vous utilisez le paramètre -r

Commentaires

Réponse

scp a largument -r. Alors, essayez dutiliser:

$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir 

Largument -r fonctionne exactement comme largument -r dans cp, il transférera tout votre dossier et tous les fichiers et sous-répertoires à lintérieur.

Commentaires

  • Votre commande a créé le répertoire local_dir dans / var / www / html / target_dir mon objectif est de copier uniquement les fichiers.
  • Désolé, je me suis trompé. Ensuite, répétez simplement la commande, mais comme ceci: $ scp -r ~/local_dir [email protected]:/var/www/html/ Puis renommez le nouveau répertoire si nécessaire.
  • Ou $ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir Peu importe fait flotter votre bateau.
  • Remplacez le caractère générique * par un point . et vous ' ll copiera le contenu du répertoire (y compris les fichiers dot) sans copier le répertoire lui-même. scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
  • Malheureusement, lutilisation de . a été interrompue par un scp " bugfix " (voir < superuser.com/questions/1403473/scp-error-unexpected-filename/… ). rsync serait une alternative efficace.

Réponse

Si votre objectif est de transférer tous les fichiers de local_dir le caractère générique * fait laffaire:

$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir 

Loption -r signifie « récursivement », vous devez donc lécrire lorsque vous « essayez de transférer un répertoire entier ou plusieurs répertoires.

De man scp:

-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal. 

Donc, si vous avez des sous-répertoires à lintérieur de local_dir, le dernier exemple ne transférera que les fichiers, mais si vous définissez loption -r, il transférera les fichiers et répertoires.

Commentaires

  • 1+ Parce que vous devez lire les commentaires dans la réponse acceptée pour obtenir la bonne réponse, alors que celle-ci lexplique directement.

Réponse

Ajout de /. à votre répertoire source transférera son contenu au lieu du répertoire lui-même. Contrairement à la solution générique, cela inclura également tous les fichiers cachés.

$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir 

Le crédit de cette solution va à roaima, mais jai pensé quelle devrait être publiée comme une vraie réponse, pas seulement un commentaire.

Commentaires

Réponse

Suivez ces étapes:

  1. Copier le répertoire local_dir avec tous ses sous-répertoires:

    scp -r ~/local_dir [email protected] /var/www/html/target_dir 
  2. copier uniquement le contenu de local_dir et non le répertoire local_dir lui-même:

    scp -r ~/local_dir/* [email protected] /var/www/html/target_dir 
  3. Ne pas utiliser: scp -r ~/local_dir/. [email protected] /var/www/html/target_dir comme il jette une erreur (juste testé et reçu lerreur suivante):

    scp: error: unexpected filename: . 

Commentaires

  • Jobtiens également lerreur de nom de fichier inattendu. Cependant, lutilisation du caractère générique ne fonctionne pas non plus car le répertoire contient un nombre de fichiers qui dépasse la limite de caractères pour les commandes lorsque le caractère générique est développé. macOS
  • @RichardKiefer: Vous pouvez utiliser des caractères génériques comme? avec * pour isoler davantage les résultats de la recherche, puis les transmettre à scp. Essayez ce lien, cela peut aider: Wildcards
  • Merci Syed, mais je voulais en fait cibler tous les éléments du dossier , et nen filtrer aucun. Et si mon répertoire en contient trop, le caractère générique ne fonctionnera tout simplement pas.
  • @RichardKiefer: Mes excuses Richard, pour obtenir tous les fichiers copiés, nous pouvons utiliser un petit script bash. Utilisez: ls -l | awk '{print $9}' et redirigez toute la sortie (qui serait tous les noms de fichier) vers un fichier txt. Lisez le fichier txt, une ligne à la fois et utilisez cette entrée avec scp pour copier les fichiers: input=/home/user/filename.txt while IFS= read -r line

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *