ファイルをコピーすると同時にターゲットディレクトリを作成するにはどうすればよいでしょうか?

ファイルをコピーすると同時にターゲットディレクトリを作成するにはどうすればよいでしょうか?

私はし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/

これはディレクトリとコンテンツ全体をコピーしますが、私は1つのファイルだけが欲しいのです。しかし、それをやろうとすると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。これは、あなたが望むものに非常に近いですが、正確ではありません。また、必要のないディレクトリ
も作成します。ただし、最初に cd して次のようにコピーすることができます。aaaaaa

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

持っていない場合pax(これは、標準化するには非互換性が多すぎる cpio および tar の標準的な代替として POSIX によって義務付けられています)、代わりにcpio -pまたは を使用してくださいtar -cf - … | tar -xf -

関連情報