Comment faire pour scp copier les fichiers cachés?

63

J'utilise souvent SCP pour copier des fichiers, en particulier des fichiers liés au Web. Le problème est que chaque fois que je fais cela, je ne peux pas obtenir ma commande pour copier des fichiers cachés (par exemple, .htaccess).

J'appelle généralement ceci:

scp -rp src/ user@server:dest/

Cela ne copie pas les fichiers cachés. Je ne veux pas avoir à invoquer ce nouveau (en faisant quelque chose comme scp -rp src/.* ...- et qui a étrange .et ..implications de toute façon.

Je n'ai rien vu dans la scppage de manuel concernant un "inclure les fichiers cachés".

Comment puis-je accomplir cela?

rascher
la source
Je suppose que des src/.*copies src/..(le répertoire parent), non?
Ken Sharp

Réponses:

67

Cela devrait absolument correspondre aux fichiers cachés. Le / à la fin de la source dit "chaque fichier sous ce répertoire". Néanmoins, les tests et les recherches vous le permettent. C'est un comportement stupide.

La " réponse " consiste à ajouter un point à la fin de la source:

scp -rp src/. user@server:dest/

La vraie réponse est d'utiliser rsync.

Matt Simmons
la source
Belle astuce que je n'avais pas encore compris.
cstamas
21
rsync -avz -e ssh --progress src / utilisateur @ serveur: dest /
MikeyB
2
Je ne peux pas reproduire ce comportement. scp -r source/ host:source2copie les fichiers de points. Fonctionne sous OpenSSH 5.1 à partir de 2007.
Mikel Le
3
Notez que l'ajout .à la fin ne fonctionne plus (2019) en raison de problèmes de sécurité. Ceci est expliqué ici: superuser.com/questions/1403473/scp-error-unexpected-filename
Stéphane
25

Vous pouvez essayer rsync. C'est mieux adapté pour ce travail:

rsync -av src / utilisateur @ serveur: dest /

(Et sa page de manuel mérite d'être lue.)

cstamas
la source
2
J'utilise toujours l'option --progress pour rsync, je ne peux pas m'en passer = D
Hofa
1
@Hofa j'utilise habituellement -P parce qu'il est plus court, inclut déjà --progress et inclut également --partial, ce qui peut avoir un sens si je suis déjà intéressé par sa progression ;-)
cstamas
9

Ne mettez pas de barre oblique après le répertoire source. Votre code ressemblerait à ceci:

scp -rp src user@server:dest/

Cela créera un répertoire "src" sous "dest" sur la machine distante, avec tous les fichiers cachés inclus. Ce n'est probablement pas exactement ce que vous voulez, mais il va copier les fichiers cachés dans src.

kbyrd
la source
3

Ce qui suit va résoudre le problème, cela a été entièrement testé sur notre environnement d'intégration continue

scp -rp src/. user@server:dest/
example scp -rp /usr/src/code/. [email protected]:/usr/dest/code/

J'espère que ça aide

Stevenagaar
la source
Après la mise à jour récente de scp, cela se traduit maintenant par scp: error: unexpected filename: . . Assurez-vous de vérifier si cela fonctionne avec votre distribution, collègue Googler :)
Moritz Friedrich
1

Pour copier uniquement les fichiers cachés, utilisez cette commande

scp -rp /path_to_copy_hidden/.[!.]* user@host:/path_to_paste/

Le jeu réel est l’ /.[!.]*étiquette qui fait référence aux fichiers commençant par .(caché)

Shahzaib Hayat Khan
la source
0

Aucune des solutions scp ci-dessus n'a fonctionné pour moi. Cependant, j’ai constaté que cgwin fonctionnait comme suit: scp -r répertoire / * hôte: répertoire Le "*" correspond à tous les fichiers visibles et ignore l’invisible.

Ray Cote
la source
0

Si la connexion par mot de passe est désactivée sur la machine distante et que le seul moyen de se connecter est via une clé publique, vous pouvez utiliser ceci:

$ rsync -av -s 'ssh -i /path/to/your/private/SSH/key' --progress [email protected]:/remote/source/directory/ /local/destination/directory/

Il copie également les fichiers cachés.

Veuillez également noter que "utilisateur1" doit avoir les autorisations pour lire ces fichiers. Par exemple, vous ne pouvez pas copier les dossiers ssh des autres utilisateurs avec cette méthode.

Gergely Lukacsy
la source
0

Comme scpsupporte les expressions régulières, ceci fera bien l'affaire pour vous:

scp -rp src/(*|.*) user@server:dest/

Donmutti
la source
0

Le contrôle de révision distribué gère les fichiers cachés

En raison de la vulnérabilité CVE-2018-20685, l' /.astuce ne peut plus être utilisé avec scp. Cependant, un contrôle de révision distribué tel que gitou Hg Mecurial gérera les fichiers cachés comme n'importe quel autre fichier. Voici les commandes pour mon favori Hg Mercurial :

server:$ sudo apt install mercurial
client:$ sudo apt install mercurial
client:$ hg init src
client:$ cd src/
client:$ hg addr
client:$ hg com -m "first commit"
client:$ cd
client:$ hg clone src ssh://user@server/dest/

Les modifications ultérieures devront être validées à nouveau avec client:$ hg com -m "commit message", puis poussées à l'aide de la client:$ hg pushcommande. En savoir plus sur les modifications à apporter à cette aide-mémoire Hg Mercurial .

Serge Stroobandt
la source