2017-04-24 16 views
2

フォルダをコピーする前にフォルダを作成することはできますか?Docker:cpを実行する前にフォルダを削除して作成する

docker cp /opt/project/build/core/bundle target_container:/opt/project/build/core 

通常は、/opt/project/build/が存在します。

私がしたいのは、フォルダbundleをコピーして、既存のフォルダとそのファイルが存在する場合はそのファイルを置き換えることです。存在しない場合は、core/bundleというフォルダを作成し、ファイルをコピーする必要があります。

答えて

1

docker execを入力すると、コンテナ内でコマンドを実行できます。

docker exec $target_container mkdir -p /opt/project/build/core 
docker cp /opt/project/build/core/bundle $target_container:/opt/project/build/core/ 

末尾core/ディレクトリにソースをコピーするためにドッキングウィンドウを告げるcp/いうよりbundle命名 - 完全にしたい場合>core

は「

を交換してください既存のbundleディレクトリに置き換えるのではなく、cpというファイルを追加してくださいdは削除から始める必要があります。

docker exec $target_container sh -c \ 
    'rm -f /opt/project/build/core && mkdir -p /opt/project/build/core' 
+0

どのようにビルドフォルダを削除し、新しい空のバンドルフォルダを作成することができますか? 'docker exec $ target_container rm -f/opt/project/build && docker exec $ target_container mkdir -p/opt/project/build/core'これを1つのコマンドにマージできますか? – user3142695

+0

これは 'sh'のようなスクリプトやシェルで実行する必要があります。私は例を更新しました – Matt

2

あまり直感的な選択肢とはいえoneliner:

tar xf - <dir> | docker exec -i <container> tar xf - 
+0

ニース。 'tar xf - ビルド/コア| docker exec -i tar -C/opt/project -xf -'は、異なるソースパスと宛先パスを許可します。 – Matt

+0

私はそこに 'rm'を入れることができないのか分かりません。 – Matt

+0

私は '--recursive-unlink'を使うことができると思います – jolooket

関連する問題