和 之间有什么区别?和当前目录?

和 之间有什么区别?和当前目录?

我正在尝试复制当前目录作为源。使用完整路径给了我预期的行为,将整个目录复制到目的地。

$ 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/ba/tmp/b/aa/tmp/b/a

在第二种情况下,您要求将其内容cp复制到;使用与上面相同的思维过程,我们可以将其视为首先复制,到(./tmp/b./tmp/b/.IE /tmp/b),然后将.的内容复制到/tmp/b/..

没有可以在所有情况下工作的当前目录的简短引用,因为当前目录可能有不同的名称(使用符号链接)。我认为你能得到的最接近的是$PWD

答案2

使用.有一定的优点。例如,您可以复制一个目录,而不必关心它是否已经作为目标存在(尽管父目录必须存在):

根据/tmp/target命令是否是现有目录

cp -a /path/to/source/dir /tmp/target

导致不同的结果。但

cp -a /path/to/source/dir/. /tmp/target

在两种情况下都有相同的结果。

相关内容