ファイルを /a/b/c/d.txt から /x/a/b/c/d.txt に移動し、存在しない場合はツリー全体を生成します。

ファイルを /a/b/c/d.txt から /x/a/b/c/d.txt に移動し、存在しない場合はツリー全体を生成します。

ディレクトリを繰り返しながら、古いファイルを別の場所に移動しています。例えば。エラーなしで移動/a/b/c/d.txtしたい/x/a/b/c/d.txtパスにあるファイルです。単一のコマンドでこれは可能ですか?mvうまくいかない場合cpとの組み合わせはrm機能しますか?

  • 一度に1つのファイルを移動するだけです。
  • ターゲットツリーがすでに存在する場合は、エラーは発生しないでください。
  • ターゲットツリーが存在しない場合は作成されます。

この投稿要件が満たされていないようです。複数行のコードを使用してこれを行うこともできます。それでは、事前定義された単一行オプションを持つことは可能ですか? (プログラミング言語と統合したい)

答え1

標準コマンドのみを使用する必要がある場合は、必要なコマンドではないかもしれませんが、rsync役に立ちます。

$ mkdir a a/b a/b/c; echo foo >a/b/c/d.txt; tree a
a
└── b
    └── c
        └── d.txt

2 directories, 1 file
$ rsync --relative --remove-source-files a/b/c/d.txt x/
$ tree a x
a
└── b
    └── c
x
└── a
    └── b
        └── c
            └── d.txt

5 directories, 1 file

~から手動:

--relative, -R

相対パスを使用します。これは、ファイル名の最後の部分だけでなく、コマンドラインで指定されたフルパス名がサーバーに送信されることを意味します。 ...

そして

--remove-source-files

これは送信の一部であり、受信側から正常にコピーされたファイル(つまりディレクトリではなく)を送信側から削除するようにrsyncに指示します。

関連情報