私はし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 して次のようにコピーすることができます。aaa
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
持っていない場合pax
(これは、標準化するには非互換性が多すぎる cpio および tar の標準的な代替として POSIX によって義務付けられています)、代わりにcpio -p
または を使用してくださいtar -cf - … | tar -xf -
。