ファイルのコピー中にターゲットディレクトリを作成する方法は?

ファイルのコピー中にターゲットディレクトリを作成する方法は?

cp aaa/deep/sea/blob.psd欲しいbbb/deep/sea/blob.psd

deepコピーが必要なディレクトリを作成し、ファイルをコピーし、ディレクトリがsea存在しない場合はどのようにコピーを作成できますか?bbb

今私は
No such file or directory深すぎて海が存在しません。

ヘルプページやその他の質問を見てみましたが、何も興味を持っていませんでした。

私が得た最も近いのはrcpディレクトリに関するものです。

rcp -r aaa/deep/sea/ bbb/deep/sea/

これはディレクトリ全体と内容をコピーしますが、単一のファイルだけが必要です。しかし、これを試してみるとcp: cannot create regular file bbb/deep/sea/blob.psd' such file or directory

答え1

installプログラムを使用するのは簡単ですコアツール通常、次のビルドシステムでこの目的に使用されます。自動車メーカー:

install -D /path/to/source /path/to/destination

install作成するので参考にしてくださいみんなパスの一部はと同じです。mkdir -pを参照してください。man installなぜ含めなかったのか疑問に思います。なぜあなたはこれをしたいです。電話はmkdirとても便利ですcp

答え2

この場合は、次の機能を試してください。

copy_wdir() { mkdir -p -- "$(dirname -- "$2")" && cp -- "$1" "$2" ; }

そしてそれを次のように使用してください

copy_wdir aaa/deep/sea/blob.psd bbb/deep/sea/blob.psd

ところで、GNUにはオプションがcpあります--parents。あなたが望むものに本当に近いですが、必ずしもそうではありません。
また、aaa不要なディレクトリも作成します。ただし、まずCDを使用しaaaて次のようにコピーできます。

cd aaa && cp --parents deep/sea/blob.psd ../bbb/

答え3

標準(POSIX / Unix)コマンドを使用すると、次のことができます。

pax -rws ':^:dest/dir/:' file .

答え4

cd aaa
pax -rw deep/sea/blob.psd ../bbb

1つもない場合pax(標準化するにはあまり互換性がないため、POSIXではcpioとtarの標準代替として指定)、または代わりにcpio -p使用tar -cf - … | tar -xf -してください。

関連情報