等しい方法でcpを使用してフォルダを再帰的にコピーするには?

等しい方法でcpを使用してフォルダを再帰的にコピーするには?

私が使うとき

cp -R inputFolder outputFolder

明らかにする状況によって異なる:

  1. outputFolder存在しない場合、複製されたフォルダパスはですoutputFolder
  2. 存在する場合、outputFolder生成されたクローンはoutputFolder/inputFolder

これは怖すぎる、いくつかのインストールスクリプトを作成したいので、ユーザーが誤って2回実行すると最初に生成され、2outputFolder回目の実行ではすべてが再生成されますoutputFolder/inputFolder

  • 私はいつも最初の動作をしたいです。つまり、元のオブジェクトの横にレプリカ(兄弟として)を作成します。
  • 私が使いたいのはポータブルです。 (たとえば、MINGWは出荷されcpません。)rsync
  • 確認しましたが、cp -R --parentsディレクトリツリーのパスが再生成されます(したがってレプリカはそうではありませんoutputFoldersome/path/outputFolder
  • --remove-destinationまたは、--updateケース 2 で何も変更されない場合、コンテンツはコピーされ続けます。outputFolder/inputFolder

outputFolderまず、存在するかどうかを確認したり(フォルダがない場合...)、使用せずにこれを行う方法はありますかrm -rf outputFolder

合意された移植可能なUNIXアプローチは何ですか?

ベストアンサー1

代わりにこれを使用してください:

cp -R inputFolder/. outputFolder

これはまったく同じように機能しますcp -R aaa/bbb cccccc存在しない場合はbbbその内容のコピーとして作成されますが、cccすでに存在する場合はその内容のコピーccc/bbbとして生成されます。bbb

このようなほとんどすべてのbbb状況で、あなたの質問に指摘した望ましくない動作が発生します。しかし、この特別なケースでは、「bbbjust」も.「really just」aaa/bbbも同じですaaa/.。これは「really just aaa」ですが、名前が異なります。したがって、次の2つの状況があります。

  1. ccc存在しない:

    このコマンドは、「の内容をcp -R aaa/. ccc作成してコピーする」という意味です。cccaaa/.ccc/.aaaccc

  2. ccc存在しますか?

    このコマンドはcp -R aaa/. ccc「コンテンツaaa/.をにコピーしますccc/.。つまり、aaaにコピーしますccc

おすすめ記事