現在のディレクトリをソースにコピーしようとしています。フルパスを使用すると、ディレクトリ全体を宛先にコピーする予想される動作が提供されます。
$ cd /tmp
$ mkdir a b
$ cd a
$ touch 1 2 3
$ cp -r /tmp/a /tmp/b # use /tmp/a as source
$ ls /tmp/b
a
しかし、.
ソースを引用するとコンテンツディレクトリ自体ではなくソース。
$ cd /tmp
$ mkdir c
$ cd a
$ cp -r . /tmp/c # use . as source
$ ls /tmp/c
1 2 3
.
現在のディレクトリの絶対パスとの違いは何ですか?現在のディレクトリ自体をコピーしたい場合は、簡単な参照はありますか? (私が見ることができる唯一の方法はを使用することですが../a
、これは少し重複しているようです。)
答え1
cp
最初のケースではコンテンツのコピーを要求するので、まずコンテンツをコピーしてからコンテンツをコピーします。/tmp/a
/tmp/b
a
/tmp/b/a
a
/tmp/b/a
2番目のケースでは、上記と同じ事故プロセスを使用してコンテンツをコピーするように依頼しますcp
。これを最初のコピーと考えることができます。.
/tmp/b
.
/tmp/b/.
つまり /tmp/b
)、.
内容をにコピーします/tmp/b/.
。
現在のディレクトリの名前が異なる可能性があるため(シンボリックリンクを使用)、すべての場合に機能する現在のディレクトリへの短い参照はありません。私の考えにあなたが得ることができる最も近いものは$PWD
。
答え2
を使用すると、.
特定の利点があります。たとえば、ディレクトリが既にターゲットとして存在するかどうかを気にせずにディレクトリをコピーできます(親ディレクトリが必要です)。
/tmp/target
コマンドが既存のディレクトリかどうかによって
cp -a /path/to/source/dir /tmp/target
別の結果を取得します。しかし、
cp -a /path/to/source/dir/. /tmp/target
どちらの場合も、同じ結果が表示されます。