Я смонтировал диск в /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/ $_