0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

環境によって変化するディレクトリコピー時の振る舞い

Last updated at Posted at 2023-09-12

cpコマンドで-r以外のoptionを付けずにディレクトリをコピーする際や、Dockerfile内でCOPYコマンドを使う際、環境やディレクトリ名に/を付けるか否かによって振る舞いが異なったので、備忘録的にまとめておきます。

  • macOSのcpコマンド
  • ubuntu linux (on Docker)のcpコマンド
  • Dockerイメージビルド時のCOPYコマンド

について投稿者のmacbook上でのテスト結果をまとめたものになるので、もしかすると実際の挙動とは異なるところがあるかもしれません。

扱うパターンは以下の通りです。

# mac, ubuntu linux (on Docker)
cp -r dir1 dir2
cp -r dir1/ dir2
cp -r dir1 dir2/
cp -r dir1/ dir2/
# Dockerfile (dir2は既にコンテナ側に存在)
COPY dir1 dir2
COPY dir1/ dir2
COPY dir1 dir2/
COPY dir1/ dir2/

大元のディレクトリ構成は以下のようになっています。

├── dir1/
│   └── child_dir1/
└── dir2/
    └── child_dir2/

cp元dirがcp先dirの子になるパターン

cp -r dir1 dir2

├── dir1/
│   └── child_dir1/
└── dir2/
    ├── child_dir2/
    └── dir1/
        └── child_dir1/
  • ubuntu linux (on Docker)では必ずこうなる
  • macOSではcp元ディレクトリ名に/を付けない時(cp -r dir1 dir2もしくはcp -r dir1 dir2/とする場合)にこうなる

cp元dirの中身がcp先dirにコピーされるパターン

cp -r dir1 dir2 # macOSの場合
COPY dir1 dir2 # Dockerfileの場合

├── dir1
│   └── child_dir1/
└── dir2
    ├── child_dir1/
    └── child_dir2/
  • Dockerfile上のCOPYコマンドでは必ずこうなる
  • macOSではcp元ディレクトリ名に/を付ける時(cp -r dir1/ dir2もしくはcp -r dir1/ dir2/とする場合)にこうなる
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?