BSD cp だと source のパスの末尾に "/" が付いていると中身をコピーする
どういう事かというと
うおぉぉ… cp の -R オプションって BSD 版だと source directory path が / で終わるとその中身を destination directory にだばぁするのか。rsync 的な挙動。GNU 版は末尾が / でもそうでなくても関係ない。なんか今まで作ったシェルスクリプト怖くなってきたんだけど…
— tyru (@_tyru_) 2019年3月12日
$ mkdir dirA dirB
— tyru (@_tyru_) 2019年3月12日
$ touch dirA/{a,b,c}
$ cp -R dirA/ dirB/
$ ls -F dirB/
の結果が以下のどちらかになる。自分は今まで GNU の挙動しか知らなかった…
BSD: a b c
GNU: dirA/
man 見ると GNU は "copy directories recursively" だけなのに BSD は以下のような感じ。https://t.co/5Wz7DOCAdB
— tyru (@_tyru_) 2019年3月12日
という事です(手抜き記事)。
正直早々に /bin/sh で動かすように書こうとするのを諦めた身としては絶対にクロスプラットフォームなシェルスクリプトとか書きたくない気持ちがさらに強くなった(恐らくそんな機会はない)
— tyru (@_tyru_) 2019年3月12日
シェルスクリプトとは簡単な定型処理を自動化するために書き捨てる位の距離を保ってるのが一番ちょうどいい
— tyru (@_tyru_) 2019年3月12日