复制文件夹时是否应该在源和目标之后添加尾部斜杠

问题描述 投票:0回答:3

我要复制:

  • 此文件夹:
    ajax
    (
    /home/thej/public_html/JC/ajax
    )。
  • 进入此文件夹:
    /home/thej/public_html/demo/conf/
    。最终结果将是
    /home/thej/public_html/demo/conf/ajax

我知道

cp
命令应该类似于:

cp -r /home/thej/public_html/JC/ajax /home/thej/public_html/demo/conf

我的问题是:

  1. 我应该把

    /
    放在
    ajax
    ajax/
    之后吗?

  2. 我应该把

    /
    放在
    conf
    conf/
    之后吗?

我在网上google了一下,有些放了“/”,有些则没有,所以真的很困惑。

linux unix cp
3个回答
79
投票

源目录中没有尾部斜杠

不应该在源目录上添加尾部斜杠:

这一点与

cp
- 相关,但也与
mv
相关,它更重要

我将引用手册中的警告 - 请注意,它不是在手册页中找到的,而是在信息页面中找到的

info coreutils 'mv invocation'

警告:避免指定带有尾部斜杠的源名称, 当它可能是目录的符号链接时。 否则,“mv”可能会做 非常令人惊讶的事情,因为它的行为取决于底层 重命名系统调用。 在具有基于 Linux 的现代内核的系统上,它 失败并显示“errno=ENOTDIR”。 然而,在其他系统上(至少 FreeBSD 6.1 和 Solaris 10)它不会默默地重命名符号链接,而是重命名 而是符号链接引用的目录。

在目标目录上使用尾部斜杠

如果要将文件和目录移动到目录中,应在目标目录后添加尾部斜杠。
只要一切顺利,就不会改变任何事情。
但它可以帮助您避免导致数据丢失或更改的常见错误:

如果将文件移动到目录中,可能会出现两件事:
您可能拼错了目标目录名称的最后一个部分,例如一个错误的字符。 可能发生的两种情况是这两种情况:

  • 如果拼写错误的名称不存在

    • 该文件将被重命名为拼写错误的名称

    • 它被移动到预期目的地的父目录中

    • 所以最终结果既不是,也不是你期望的那样。

  • 如果拼写错误的名称确实存在,并且是一个文件:

    • 该文件将覆盖目标父目录中拼写错误的名称的文件。

    • 再说一次,你不会在原来的地方找到它,也不会在它应该在的地方找到它:它就这样消失了。

如果在目标目录上使用尾部斜杠,则两种情况都会被阻止:

它使得

mv
不使用它作为文件名,而通常会这样做。相反,
mv
只会给出一个错误:

mv: failed to access ‘foo/’: Not a directory

自动删除斜线

cp
mv
有一个特殊选项,可以通过始终从 src 目录中删除斜杠来降低风险:

Some GNU programs (at least `cp' and `mv') allow you to remove any
trailing slashes from each SOURCE argument before operating on it.  The
`--strip-trailing-slashes' option enables this behavior.

   This is useful when a SOURCE argument may have a trailing slash and
specify a symbolic link to a directory.  This scenario is in fact rather
common because some shells can automatically append a trailing slash
when performing file name completion on such symbolic links.  Without
this option, `mv', for example, (via the system's rename function) must
interpret a trailing slash as a request to dereference the symbolic link
and so must rename the indirectly referenced _directory_ and not the
symbolic link.  Although it may seem surprising that such behavior be
the default, it is required by POSIX and is consistent with other parts
of that standard.

15
投票

我尝试在目标上添加尾随

/

如果我犯了一个错误,并且源和目标都是文件而不是目录,则添加

/
意味着我会收到错误;如果没有
/
它将破坏目标文件。

(制表符补全通常会添加尾随的

/
,因此添加它通常比不添加更容易。)

请参阅Volker Siegel 的回答了解更多详细信息。


0
投票

当您看到源代码尾随斜杠时, 只有内容会随身携带。 当看不到尾部斜线时, 整个目录都加入航班。

对于目的地,斜线或无, 一切完成后,目标是一个文件夹。 但如果该文件夹不存在,请注意, 尾部斜杠不会在那里创建它。

© www.soinside.com 2019 - 2024. All rights reserved.