rsync throwing mkdir: невозможно создать каталог '/data/dir_1/dir_2/dir_3/': Такого файла или каталога нет

rsync throwing mkdir: невозможно создать каталог '/data/dir_1/dir_2/dir_3/': Такого файла или каталога нет

Я смонтировал диск в /data. В данный момент он пуст.

Мне нужно rsyncвыполнить mkdir -pто, mkdirчто нужно, так как файл должен находиться на уровне 4, т.е. /data/dir_1/dir_2/dir_3/filenameкогда dir_1, dir_2и dir_3не существует.

Если я создам необходимые подкаталоги вручную, я смогу выполнить rsync с помощью следующей команды:

rsync -avz source_diretory/ /data/dir_1/dir_2/dir_3

Но если я не создам подкаталоги, эта команда выдаст ошибку:

mkdir: cannot create directory ‘/data/dir_1/dir_2/dir_3/’: No such file or directory

Я пробовал гуглить, читать man-страницу rsync, пробовал использовать, -r -Rно не смог заставить это работать.

Может ли он rsyncвыполнить что-то подобное mkdir -pили это выходит за рамки его возможностей?

решение1

rsyncКоманда не создает дерево каталогов, поэтому вы можете сделать это, выполнив:

 mkdir -p /data/dir_1/dir_2/dir_3

перед rsyncкомандой или использованием--rsync-путьпараметры:

--rsync-path=PROGRAM Используйте этот параметр, чтобы указать, какую программу следует запустить на удаленной машине для запуска rsync.

Ваша команда должна быть такой:

 rsync -avz source_diretory/ --rsync-path="mkdir -p /data/dir_1/dir_2/dir_3 && rsync" /data/dir_1/dir_2/dir_3

Вот полезныйсвязь.

решение2

Более короткий способ создания путей назначения rsync в Linux — использование специальной переменной '$_'. (Я думаю, но не могу подтвердить, что в OSX то же самое).

'$_' содержит значение последнего аргумента предыдущей выполненной команды. Поэтому на вопрос можно ответить так:

mkdir -p /data/dir_1/dir_2/dir_3 && rsync -avz source_directory/ $_

Связанный контент