私が使うとき
cp -R inputFolder outputFolder
明らかにする状況によって異なる:
outputFolder
存在しない場合、複製されたフォルダパスはですoutputFolder
。- 存在する場合、
outputFolder
生成されたクローンはoutputFolder/inputFolder
これは怖すぎる、いくつかのインストールスクリプトを作成したいので、ユーザーが誤って2回実行すると最初に生成され、2outputFolder
回目の実行ではすべてが再生成されますoutputFolder/inputFolder
。
- 私はいつも最初の動作をしたいです。つまり、元のオブジェクトの横にレプリカ(兄弟として)を作成します。
- 私が使いたいのはポータブルです。 (たとえば、MINGWは出荷され
cp
ません。)rsync
- 確認しましたが、
cp -R --parents
ディレクトリツリーのパスが再生成されます(したがってレプリカはそうではありませんoutputFolder
)some/path/outputFolder
。 --remove-destination
または、--update
ケース 2 で何も変更されない場合、コンテンツはコピーされ続けます。outputFolder/inputFolder
outputFolder
まず、存在するかどうかを確認したり(フォルダがない場合...)、使用せずにこれを行う方法はありますかrm -rf outputFolder
?
合意された移植可能なUNIXアプローチは何ですか?
ベストアンサー1
代わりにこれを使用してください:
cp -R inputFolder/. outputFolder
これはまったく同じように機能しますcp -R aaa/bbb ccc
。ccc
存在しない場合はbbb
その内容のコピーとして作成されますが、ccc
すでに存在する場合はその内容のコピーccc/bbb
として生成されます。bbb
このようなほとんどすべてのbbb
状況で、あなたの質問に指摘した望ましくない動作が発生します。しかし、この特別なケースでは、「bbb
just」も.
「really just」aaa/bbb
も同じですaaa/.
。これは「really just aaa
」ですが、名前が異なります。したがって、次の2つの状況があります。
ccc
存在しない:このコマンドは、「の内容を
cp -R aaa/. ccc
作成してコピーする」という意味です。ccc
aaa/.
ccc/.
aaa
ccc
ccc
存在しますか?このコマンドは
cp -R aaa/. ccc
「コンテンツaaa/.
をにコピーしますccc/.
。つまり、aaa
にコピーしますccc
。