A sequência de comandos
mkdir -p BASE/a/b/c && cp -a --target-directory=BASE/a/b/c /a/b/c/d
cria um subdiretório a/b/c
em BASE
e copia a árvore de diretórios em /a/b/c/d
para BASE/a/b/c
.
Um problema é que envolve muita repetição, o que convida a erros.
Posso rolar uma função de shell que encapsula essa operação; por exemplo, aqui está um esboço dele sem nenhuma verificação/manipulação de erros:
copytwig () {
local source=$1
local base=$2
local target=$base/$( dirname $source )
mkdir -p $target && cp -a --target-directory=$target $source
}
...mas eu queria saber se isso já poderia ser feito com um utilitário Unix "padrão" (onde estou usando "padrão" como abreviação de "provavelmente encontrado em um sistema Unix, ou pelo menos provável de ser encontrado em um sistema Linux").
Com
pax
(um utilitário POSIX obrigatório, embora ainda não instalado por padrão em algumas distribuições GNU/Linux):(observe que nem
--target-directory
tampouco-a
sãocp
opções padrão. Essas são extensões GNU).Observe que com
-pe
(semelhante ao GNU's-a
),pax
tentará copiar os metadados (tempos, proprietário, permissões ...) dos componentes do diretório também (enquantoBASE
os metadados de ' serão como se fossem criados commkdir BASE
).Você pode usar a
--parents
opção paracp
preservar a estrutura do diretório.Editar: desculpe, você pediu uma solução Unix, mas parece ser apenas Linux. :(