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
、後者はその内容をコピーするためになります。dest
dest/src
src/a
dest/src/a
src
src/a
dest/a
他の2つでは、シェルは地球を拡張するので-r
。
cp ./* dest
cp ./** dest
最初のケースでは、シェルは./*
現在のディレクトリのファイル名のリスト(ドットで始まる名前を除く)に展開してcp
コピーします。 2番目の場合、これをサポートするシェルは./**
ファイル名の再帰的なリストに展開され、リストされcp
たファイルを再コピーします。
設定すると、**
少なくともBashとkshで再帰が機能します。shopt -s globstar
set -o globstar
名前がドットで始まるファイルまたはディレクトリは、ツリーに表示されるレベルに関係なく、Bashまたはkshの結果に含まれないため、ドットを使用することは、ディレクトリ構造全体の完全な**
コピーを作成するのに最適な方法ではありません。cp -r . dest
ファイルもコピーされます。
Bashはshopt -s dotglob
andを使用してポイントファイルを隠すことを無効にできます。 kshに似た機能があるかどうかはわかりません。*
**