¿Cómo hacer que scp copie archivos ocultos?


63

A menudo uso SCP para copiar archivos, especialmente archivos relacionados con la web. El problema es que cada vez que hago esto, no puedo obtener mi comando para copiar archivos ocultos (por ejemplo, .htaccess).

Normalmente invoco esto:

scp -rp src/ user@server:dest/

Esto no copia archivos ocultos. No quiero tener que invocar esto nuevamente (haciendo algo como scp -rp src/.* ..., y eso tiene extrañas .e ..implicaciones de todos modos.

No vi nada en la scppágina del manual sobre "incluir archivos ocultos".

¿Cómo puedo lograr esto?


Supongo que src/.*también copias src/..(el directorio principal), ¿verdad?
Ken Sharp

Respuestas:


67

Eso debería coincidir absolutamente con los archivos ocultos. El / al final de la fuente dice "cada archivo en este directorio". Sin embargo, las pruebas y la investigación lo confirman. Este es un comportamiento estúpido.

La " respuesta " es agregar un punto al final de la fuente:

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

La verdadera respuesta es usar rsync.


Buen truco No me di cuenta de esto todavía.
cstamas

21
rsync -avz -e ssh --progress src / user @ server: dest /
MikeyB

2
No puedo reproducir ese comportamiento. scp -r source/ host:source2copia archivos de puntos. Funciona en OpenSSH 5.1 desde 2007.
Mikel

3
Tenga en cuenta que agregar un .al final ya no funciona (2019) debido a problemas de seguridad. Esto se explica aquí: superuser.com/questions/1403473/scp-error-unexpected-filename
Stéphane

25

Puedes probar rsync. Es más adecuado para este trabajo:

rsync -av src / usuario @ servidor: dest /

(Y vale la pena leer su página del manual).


2
Yo siempre uso la opción --progress para rsync, no puedo vivir sin ella = D
Hofa

1
@Hofa Usualmente uso -P porque es más corto, ya incluye --progress y también incluye --partial que puede tener sentido si ya estoy interesado en su progreso ;-)
cstamas

9

No coloque una barra diagonal después del directorio de origen. Su código se vería así:

scp -rp src user@server:dest/

Esto creará un directorio 'src' debajo de 'dest' en la máquina remota, con todos los archivos ocultos incluidos. Probablemente no sea exactamente lo que desea, pero copiará archivos ocultos en src.


3

Lo siguiente resolverá el problema, esto se ha probado completamente en nuestro entorno de integración continua

scp -rp src/. user@server:dest/
example scp -rp /usr/src/code/. content001@172.11.11.11:/usr/dest/code/

Espero eso ayude


Después de actualizar scp recientemente, esto ahora da como resultado scp: error: unexpected filename: . . Asegúrese de probar si funciona con su distribución, compañero de Google :)
Moritz Friedrich

1

Para copiar solo archivos ocultos, use este comando

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

El juego real es la /.[!.]*etiqueta que se refiere a los archivos que comienzan con .(oculto)


0

Ninguna de las soluciones scp anteriores funcionó para mí. Sin embargo, descubrí que lo siguiente funcionó en cygwin: scp -r directorio / * host: directorio El '*' coincidió con todos los archivos visibles y omitió lo invisible.


0

Si el inicio de sesión con contraseña está deshabilitado en la máquina remota, y la única forma de iniciar sesión es mediante clave pública, puede usar esto:

$ rsync -av -s 'ssh -i /path/to/your/private/SSH/key' --progress user1@remote.host:/remote/source/directory/ /local/destination/directory/

También copia archivos ocultos.

También tenga en cuenta que "user1" debe tener los permisos para leer esos archivos, por ejemplo, no puede copiar las carpetas ssh de otros usuarios con este método.


0

Como scpadmite expresiones regulares, esto será un buen truco para usted:

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


0

El control de revisión distribuido maneja archivos ocultos

Debido a la vulnerabilidad CVE-2018 a 20685, el /.truco ya no se puede utilizar con scp. Sin embargo, el control de revisión distribuido como gito Hg Mecurial manejará archivos ocultos como cualquier otro archivo. Aquí están los comandos para mi Hg Mercurial favorito :

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/

Los cambios posteriores deberán confirmarse nuevamente client:$ hg com -m "commit message"y luego presionarse con el client:$ hg pushcomando. Obtenga más información sobre cómo impulsar los cambios en esta hoja de trucos de Hg Mercurial .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.