我正在尝试复制当前目录作为源。使用完整路径给了我预期的行为,将整个目录复制到目的地。
$ 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
在第二种情况下,您要求将其内容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
在两种情况下都有相同的结果。