I ran into an issue where I want to use rsync to copy a folder to a remote host into a destination directory that doesn’t yet exist. I was frustrated to find that rsync doesn’t appear to be able to create a remote directory tree. It would keep erroring out with this message:
rsync: mkdir "/opt/splunk/var/run/searchpeers" failed: No such file or directory (2)
I discovered this workaround which allowed me to finally accomplish what I wanted in one line: create the remote directory structure first, then synchronize into it. This is done with the --rsync-path
option. You can specify the mkdir -p
command beforehand, then add the rsync command after double ampersand (&&)
My specific use case was to copy a Splunk search peer bundle from one indexer to another. This was my working one liner:
rsync -aP --rsync-path="sudo mkdir -p /opt/splunk/var/run/searchpeers && sudo rsync" /opt/splunk/var/run/searchpeers splunk-idx2.jeppson.org:/opt/splunk/var/run/searchpeers
Success.