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
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 unascp
" 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
- Desafortunadamente, esta solución se ha roto debido a una " corrección de errores " (consulte < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).
Responder
Siga estos pasos:
-
Copie el directorio
local_dir
con todos sus subdirectorios:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
copie solo el contenido de
local_dir
y no el directoriolocal_dir
en sí mismo:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir
-
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
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.