cp aaa/deep/sea/blob.psd
eu querobbb/deep/sea/blob.psd
Como faço a cópia se os diretórios deep
e sea
não existem bbb
para que a cópia crie os diretórios necessários e copie o arquivo?
Neste momento estou
No such file or directory
tão fundo e o mar não existe.
Olhei as páginas de ajuda do homem e outras perguntas, mas nada me chamou a atenção.
O mais próximo que consegui foi usar rcp
para o diretório:
rcp -r aaa/deep/sea/ bbb/deep/sea/
embora isso copie todo o diretório e conteúdo e eu queira apenas um arquivo. Tentando fazer isso, no entanto, deucp: cannot create regular file bbb/deep/sea/blob.psd' such file or directory
Responder1
É fácil usar o install
programa docoreutilsque normalmente é usado para esse propósito por sistemas de construção comoautomake:
install -D /path/to/source /path/to/destination
Observe que install
criatodospartes do caminho exatamente como mkdir -p
faz, veja man install
. Estou curioso para saber por que você não incluiupor quevocê quer fazer isso. Ligando mkdir
e cp
é muito fácil.
Responder2
Tente usar a próxima função para tal situação:
copy_wdir() { mkdir -p -- "$(dirname -- "$2")" && cp -- "$1" "$2" ; }
e usá-lo como
copy_wdir aaa/deep/sea/blob.psd bbb/deep/sea/blob.psd
A propósito, o GNU cp
tem uma --parents
opção. É muito próximo do que você deseja, mas não exatamente.
Ele também criará aaa
um diretório que parece desnecessário. No entanto, você pode primeiro gravar aaa
e copiar como:
cd aaa && cp --parents deep/sea/blob.psd ../bbb/
Responder3
Com comandos padrão (POSIX/Unix), você tem:
pax -rws ':^:dest/dir/:' file .
Responder4
cd aaa
pax -rw deep/sea/blob.psd ../bbb
Se você não tiver pax
(é obrigatório pelo POSIX, como uma substituição padrão de cpio e tar que tinha muitas incompatibilidades para padronizar), use cpio -p
ou tar -cf - … | tar -xf -
.