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 unscp
" 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
- Malheureusement, cette solution a été interrompue par un " bugfix " (voir < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).
Réponse
Suivez ces étapes:
-
Copier le répertoire
local_dir
avec tous ses sous-répertoires:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
copier uniquement le contenu de
local_dir
et non le répertoirelocal_dir
lui-même:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir
-
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
scp * [email protected]:/var/www/html/target_dir
ne fait-il pas ce que vous voulez? Si tel est le cas, veuillez modifier plus en détail ce que vous ' essayez de faire & ont essayé jusquà présent.