rsync lançando mkdir: não é possível criar o diretório '/data/dir_1/dir_2/dir_3/': Esse arquivo ou diretório não existe

rsync lançando mkdir: não é possível criar o diretório '/data/dir_1/dir_2/dir_3/': Esse arquivo ou diretório não existe

Montei um disco em /data. Isso está vazio no momento.

Preciso rsyncexecutar o arquivo mkdir -pque mkdirpreciso estar no nível 4, ou seja, quando /data/dir_1/dir_2/dir_3/filenamee não existe.dir_1dir_2dir_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 -Rmas não consegui fazer funcionar.

Pode rsyncrealizar algo parecido mkdir -pou isso está fora de seu escopo?

Responder1

rsyncO 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 rsynccomandar 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/ $_

informação relacionada