開発環境はMacOSで,ファイルをコピーするシェルスクリプトをDockerで動かしたときに,ファイル構造が異なるためにエラーとなった際のメモ.
以下のような構造のディレクトリがあるとして,
- a/
- 1.txt
- 2.txt
- b/
このコマンドを実行すると,
cp -r a/ b/
MacOS はa/の中身をコピーする.
- a/
- 1.txt
- 2.txt
- b/
- 1.txt
- 2.txt
Linxuでは,a/をそのままコピーする.
- a/
- 1.txt
- 2.txt
- b/
- a/
- 1.txt
- 2.txt
- a/
スラッシュが最後についているのが原因らしい*1.
これを回避するには,スラッシュを最後につけなければよいので,
cp -r a b/
とすれば,両方のOSで,
- a/
- 1.txt
- 2.txt
- b/
- a/
- 1.txt
- 2.txt
- a/
となり,
cp a/* b/
とすれば,両方のOSで,
- a/
- 1.txt
- 2.txt
- b/
- 1.txt
- 2.txt
となる.
*1:If the source_file ends in a /, the contents of the directory are copied rather than the directory itself. cp Man Page - macOS - SS64.comより引用