rsync が mkdir をスローしています: ディレクトリ '/data/dir_1/dir_2/dir_3/' を作成できません: そのようなファイルまたはディレクトリはありません

rsync が mkdir をスローしています: ディレクトリ '/data/dir_1/dir_2/dir_3/' を作成できません: そのようなファイルまたはディレクトリはありません

にディスクをマウントしました/data。現時点では空です。

レベル 4 である必要があるファイルとして、つまり、、およびが存在しない場合に、をrsync実行する必要があります。mkdir -pmkdir/data/dir_1/dir_2/dir_3/filenamedir_1dir_2dir_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

Google で検索したり、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

Linux で rsync の宛先パスを作成するより簡単な方法は、特殊変数「$_」を使用することです。(OSX でも同じだと思いますが、確認できません)。

'$_' は、前に実行されたコマンドの最後の引数の値を保持します。したがって、この質問に対する回答は次のようになります。

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

関連情報