quiero cp aaa/deep/sea/blob.psd
hacerlobbb/deep/sea/blob.psd
¿Cómo hago la copia si los directorios deep
y sea
no existen bbb
para que la copia cree los directorios necesarios y copie el archivo?
Ahora mismo me pongo
No such file or directory
tan profundo y el mar no existe.
Revisé las páginas de ayuda del hombre y otras preguntas, pero no me llama la atención nada.
Lo más cercano que tengo es usar rcp
para el directorio:
rcp -r aaa/deep/sea/ bbb/deep/sea/
aunque esto copia todo el directorio y el contenido y solo quiero un archivo. Sin embargo, tratar de hacer eso diocp: cannot create regular file bbb/deep/sea/blob.psd' such file or directory
Respuesta1
Es fácil usar el install
programa desde elcoreutilsque normalmente se utiliza para este mismo propósito por sistemas de compilación comoautofabricación:
install -D /path/to/source /path/to/destination
Nota que install
creatodopartes del camino tal como mkdir -p
lo hace, ver man install
. Tengo curiosidad por qué no incluistepor quéquieres hacer eso. Llamar mkdir
y cp
es muy fácil.
Respuesta2
Intente utilizar la siguiente función para tal situación:
copy_wdir() { mkdir -p -- "$(dirname -- "$2")" && cp -- "$1" "$2" ; }
y usarlo como
copy_wdir aaa/deep/sea/blob.psd bbb/deep/sea/blob.psd
Por cierto, GNU cp
tiene una --parents
opción. Está muy cerca de lo que quieres, pero no exactamente.
También creará aaa
un directorio que parece que no necesitas. Sin embargo, primero puedes copiar aaa
y copiar como:
cd aaa && cp --parents deep/sea/blob.psd ../bbb/
Respuesta3
Con los comandos estándar (POSIX/Unix), tienes:
pax -rws ':^:dest/dir/:' file .
Respuesta4
cd aaa
pax -rw deep/sea/blob.psd ../bbb
Si no lo tiene pax
(es obligatorio por POSIX, como reemplazo estándar de cpio y tar que tenían demasiadas incompatibilidades para estandarizar), use cpio -p
o tar -cf - … | tar -xf -
en su lugar.