cp
を使用して存在してもしなくてもよいフォルダーにファイルをコピーする場合、必要に応じてフォルダーを作成するためにcp
を取得するにはどうすればよいですか?これが私が試したことです。
[root@file nutch-0.9]# cp -f urls-resume /nosuchdirectory/hi.txt
cp: cannot create regular file `/nosuchdirectory/hi.txt': No such file or directory
クリスチャンの答えを拡大するために、これを行うための唯一の信頼できる方法はmkdir
とcp
を組み合わせることです。
mkdir -p /foo/bar && cp myfile "$_"
余談ですが、既存の階層内に単一のディレクトリを作成するだけでよい場合は、rsync
が1回の操作でそれを実行できます。私はrsync
をもっと用途の広いcp
の代替品として大好きです。実際、
rsync -a myfile /foo/bar/ # works if /foo exists but /foo/bar doesn't. bar is created.
私はあなたがcpでそれをすることができることを知りませんでした。
あなたはmkdirでそれをすることができます。
mkdir -p /var/path/to/your/dir
_ edit _ cpの組み込みについてはlhunathの answer を参照してください。
Mac OSXを使っている人にとって、おそらくこれを回避する最も簡単な方法は ditto を使うことです(ただし、Macの場合はAFAIKです)。宛先に存在しないディレクトリ構造が作成されます。
例えば、私はこれをしました
ditto 6.3.2/6.3.2/macosx/bin/mybinary ~/work/binaries/macosx/6.3.2/
コマンドを実行する前は、~/work
にbinariesディレクトリがありませんでした。
Rsyncも同様に機能するはずだと思いましたが、1レベルの見つからないディレクトリに対してのみ機能するようです。あれは、
rsync 6.3.3/6.3.3/macosx/bin/mybinary ~/work/binaries/macosx/6.3.3/
〜/ work/binaries/macosxは存在するが〜/ work/binaries/macosx/6.3.2 /は存在しないため
mkdir -p `dirname /nosuchdirectory/hi.txt` && cp -r urls-resume /nosuchdirectory/hi.txt
そのような選択肢はありません。ファイルをコピーする前に、 mkdir -p を実行してください。
とてもクールな あなたが存在しない場所にファイルをコピーするのに使用できるスクリプトを作りました
#!/bin/bash
if [ ! -d "$2" ]; then
mkdir -p "$2"
fi
cp -R "$1" "$2"
今それを保存し、それにパーミッションを与えて、それを使ってそれを実行してください
./cp-improved SOURCE DEST
私は-Rオプションを付けますが、それはドラフトです、私はそれが可能であることを知っています、そしてあなたは多くの方法でそれを改善するでしょう。あなたに役立つことを願っています
find
コマンドを使うこともできます。
find ./ -depth -print | cpio -pvd newdirpathname
rsyncは仕事です!
#file:
rsync -aqz _vimrc ~/.vimrc
#directory:
rsync -aqz _vim/ ~/.vim