Montei um disco em /data
. Isso está vazio no momento.
Preciso rsync
executar o arquivo mkdir -p
que mkdir
preciso estar no nível 4, ou seja, quando /data/dir_1/dir_2/dir_3/filename
e não existe.dir_1
dir_2
dir_3
Se eu criar os subdiretórios necessários manualmente, poderei executar o rsync usando o seguinte comando:
rsync -avz source_diretory/ /data/dir_1/dir_2/dir_3
Mas se eu não criar os subdiretórios, este comando gerará um erro:
mkdir: cannot create directory ‘/data/dir_1/dir_2/dir_3/’: No such file or directory
Tentei pesquisar no Google, lendo a página de manual do rsync, tentei usar, -r
-R
mas não consegui fazer funcionar.
Pode rsync
realizar algo parecido mkdir -p
ou isso está fora de seu escopo?
Responder1
rsync
O comando não cria uma árvore de diretórios, então você pode fazer isso executando:
mkdir -p /data/dir_1/dir_2/dir_3
antes de rsync
comandar ou usar--rsync-caminhoopções:
--rsync-path=PROGRAMA Use isto para especificar qual programa deve ser executado na máquina remota para iniciar o rsync.
Seu comando deve ser:
rsync -avz source_diretory/ --rsync-path="mkdir -p /data/dir_1/dir_2/dir_3 && rsync" /data/dir_1/dir_2/dir_3
Aqui está um útillink.
Responder2
Uma maneira mais curta no Linux de criar caminhos de destino rsync é usar a variável especial '$_'. (Acho, mas não posso confirmar, que também é o mesmo no OSX).
'$_' contém o valor do último argumento do comando anterior executado. Portanto, a pergunta poderia ser respondida com:
mkdir -p /data/dir_1/dir_2/dir_3 && rsync -avz source_directory/ $_