シェル:さまざまなパスパターン

シェル:さまざまなパスパターン

Linuxでは、次のパスパターンの違いは何ですか

  • ./例えばcp ./ [destination-path]
  • ./.例えばcp ./. [destination-path]
  • ./*例えばcp ./* [destination-path]
  • ./**例えばcp ./** [destination-path]

答え1

最初の2つは再帰コピーに適しています。つまり、cp -rソースが名前付きディレクトリでターゲットが存在する場合、違いが発生します。これら:

cp -r src/  dest
cp -r src/. dest

最初は生成されたファイルにコピーされ()src、後者はその内容をコピーするためになります。destdest/srcsrc/adest/src/asrcsrc/adest/a

他の2つでは、シェルは地球を拡張するので-r

cp ./*  dest
cp ./** dest

最初のケースでは、シェルは./*現在のディレクトリのファイル名のリスト(ドットで始まる名前を除く)に展開してcpコピーします。 2番目の場合、これをサポートするシェルは./**ファイル名の再帰的なリストに展開され、リストされcpたファイルを再コピーします。

設定すると、**少なくともBashとkshで再帰が機能します。shopt -s globstarset -o globstar

名前がドットで始まるファイルまたはディレクトリは、ツリーに表示されるレベルに関係なく、Bashまたはkshの結果に含まれないため、ドットを使用することは、ディレクトリ構造全体の完全な**コピーを作成するのに最適な方法ではありません。cp -r . destファイルもコピーされます。

Bashはshopt -s dotglobandを使用してポイントファイルを隠すことを無効にできます。 kshに似た機能があるかどうかはわかりません。***

関連情報