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?


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.


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.)


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.


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/. content001@172.11.11.11:/usr/dest/code/

J'espère que ça aide


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é)


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.


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 user1@remote.host:/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.


0

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

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


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 .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.