¿Cómo copiar todos los archivos de un directorio a un directorio remoto usando scp?

Mi objetivo es copiar solo todos los archivos de ~ / local_dir a [email protected] / var / www / html / target_dir usando scp y no cree la categoría local_dir en local_dir.

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

pero no

/var/www/html/target_dir/local_dir/files.. cuando se usa el parámetro -r

Comentarios

  • ¿scp * [email protected]:/var/www/html/target_dir no hace lo que quieres? Si es así, edita con más detalles de lo que ' estás intentando hacer & lo he intentado hasta ahora.
  • Añadiendo /. ya no es trabajo. Más aquí

Responder

scp tiene el argumento -r. Entonces, intente usar:

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

El argumento -r funciona igual que el -r arg en cp, transferirá su carpeta completa y todos los archivos y subdirectorios adentro.

Comentarios

  • Su comando creó el directorio local_dir en / var / www / html / target_dir mi objetivo es copiar solo archivos.
  • Lo siento, me equivoqué. Luego, simplemente repita el comando, pero así: $ scp -r ~/local_dir [email protected]:/var/www/html/ Luego cambie el nombre del nuevo directorio si es necesario.
  • O $ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir Lo que sea hace flotar su bote.
  • Cambie el comodín * por un punto . y usted ' Copiaré el contenido del directorio (incluidos los archivos dot) sin copiar el directorio en sí. scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
  • Desafortunadamente, el uso de . se ha roto debido a una scp " corrección de errores " (consulte < superuser.com/questions/1403473/scp-error-unexpected-filename/… ). rsync sería una alternativa útil.

Responder

Si su objetivo es transferir todos los archivos desde local_dir el * comodín funciona:

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

La opción -r significa «recursivamente», por lo que debe escribirla cuando esté intentando transferir un directorio completo o varios directorios.

De man scp:

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

Entonces, si tiene subdirectorios dentro de local_dir, el último ejemplo solo transferirá archivos, pero si configura la opción -r, transferirá archivos y directorios.

Comentarios

  • 1+ Porque necesitas leer los comentarios en la respuesta aceptada para llegar a la respuesta correcta, mientras que esta solo la explica directamente.

Responder

Añadiendo /. a su directorio de origen transferirá su contenido en lugar del directorio en sí. A diferencia de la solución comodín, esto también incluirá cualquier archivo oculto.

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

El crédito por esta solución es para roaima, pero pensé que debería publicarse como una respuesta real, no solo un comentario.

Comentarios

Responder

Siga estos pasos:

  1. Copie el directorio local_dir con todos sus subdirectorios:

    scp -r ~/local_dir [email protected] /var/www/html/target_dir 
  2. copie solo el contenido de local_dir y no el directorio local_dir en sí mismo:

    scp -r ~/local_dir/* [email protected] /var/www/html/target_dir 
  3. No utilice: scp -r ~/local_dir/. [email protected] /var/www/html/target_dir como arroja un error (recién probado y recibió el siguiente error):

    scp: error: unexpected filename: . 

Comentarios

  • También obtengo el error de nombre de archivo inesperado. Sin embargo, el uso del comodín tampoco funciona porque el directorio tiene tantos archivos que excede el límite de caracteres para los comandos cuando el comodín se expande. macOS
  • @RichardKiefer: ¿Puedes usar comodines como? con * para aislar aún más los resultados de búsqueda y luego pasarlo a scp. Pruebe este enlace, puede ayudar: Comodines
  • Gracias Syed, pero mi punto es que realmente quiero apuntar a todos los elementos de la carpeta. y no filtrar ninguno. Y si mi directorio tiene demasiados, entonces el comodín simplemente no funcionará.
  • @RichardKiefer: Mis disculpas Richard, para obtener todos los archivos copiados podemos usar un pequeño script bash. Utilice: ls -l | awk '{print $9}' y redirija toda la salida (que serían todos los nombres de archivo) a un archivo txt. Lea el archivo txt, una línea a la vez y use esa entrada con scp para copiar los archivos: input=/home/user/filename.txt while IFS= read -r line

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *