みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

cp -R コマンドがMacOSとLinuxで動作が異なる

開発環境は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

スラッシュが最後についているのが原因らしい*1

これを回避するには,スラッシュを最後につけなければよいので,

cp -r a b/

とすれば,両方のOSで,

  • a/
    • 1.txt
    • 2.txt
  • b/
    • a/
      • 1.txt
      • 2.txt

となり,

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より引用