したい 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
このような状況では、次の関数を使用してみてください。
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
ディレクトリも作成されます。ただし、最初にaaa
にcdして、次のようにコピーできます。
cd aaa && cp --parents deep/sea/blob.psd ../bbb/
coreutilsのinstall
プログラムを使用するのは簡単です。これは、automake:
install -D /path/to/source /path/to/destination
install
は、mkdir -p
と同様に、パスのall部分を作成することに注意してください。man install
を参照してください。なぜそれをしたいのかwhyを含めなかったのか、私は興味があります。 mkdir
とcp
の呼び出しは非常に簡単です。
標準(POSIX/Unix)コマンドを使用すると、以下が得られます。
pax -rws ':^:dest/dir/:' file .
私はcp
を使用してそれを行う方法を知りませんが、rsync
を使用することは確かに可能です:
$ rsync sourcefile dir/
ここで、dir
は、存在する必要がないディレクトリです。他のコマンドを使用して同じことを達成する他の多くの方法があります。
cd aaa
pax -rw deep/sea/blob.psd ../bbb
pax
がない場合(POSIXにより、標準化するには非互換性が多すぎてcpioとtarの標準的な置き換えとして義務付けられています)、代わりにcpio -p
またはtar -cf - … | tar -xf -
を使用します。