cpコマンドでは*は使わないほうがいい

このコマンドはドットで始まるファイルをコピーしない。*はシェルによって展開されるためで、シェルはドットで始まるファイルを*に含ませない。以下を実行するとわかる。

だからといって.*でやろうとすると、.や..も.*に含まれるため予期しない動作になる可能性が高い。

cpですべてのファイルをコピーするには*を使わずディレクトリを指定して行うのが良い。.もディレクトリなのでこれをつかってもいい。

ディレクトリ内の一部のファイル(ディレクトリ)を除いてコピーするコマンド

以下のようディレクトリからcccfffを除いてコピーしたい。

findを使って除く

テスト

これでcccfffを除いた一覧が取得できる。mindepthとmaxdepthをともに1を指定して、この階層のみ出力する。

-execでコピーする準備

-execで見つかったもファイルやディレクトリに対してコマンドを実行する。{}は見つかったファイルやディレクトリに置き換わる。\;-execの終わりを意味する。ここではcpの前にechoをつけて実行されるコマンドを確認している。このコマンドで良ければechoを削除すれば実際に実行する。