我应该在源文件夹和目标文件夹之后放置斜线

我想将这个文件夹: 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. 我应该把/之后ajaxajax/

  2. 我应该把/ conf/后?

我在网上search,有些把'/',有些不是,所以真的很困惑。

我试图把目标放在尾部。

如果我犯了一个错误,源和目标都是文件而不是目录,添加/意味着我会得到一个错误; 没有/它会打破目标文件。

(Tab完成通常会添加尾随/无论如何,所以通常比添加尾随更容易)。

有关更多详细信息,请参阅Volker Siegel的答案 。

源目录中没有结尾的斜杠

不应该在源目录上放置斜杠:

这一点与cp有关 – 但对mv来说也更重要

我会引用手册中的警告 – 请注意,在手册页中找不到它,但是在信息页info coreutils 'mv invocation'

警告 :当它可能是目录的符号链接时,避免使用结尾斜线指定源名称。 否则,“MV”可能会做一些令人惊讶的事情,因为它的行为取决于底层的重命名系统调用。 在具有现代Linux内核的系统上,它会以'errno = ENOTDIR'失败。 但是,在其他系统(至少FreeBSD 6.1和Solaris 10)上,它不会重命名符号链接,而是重命名符号链接引用的目录。

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

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

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

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

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

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

    • 所以它既不是,也不是你期望的结果。

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

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

    • 再一次,你不会发现它是这样,或者它应该在哪里:它只是消失了。

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

这使得mv在正常情况下不会将其用作文件名。 相反, mv只是给出了一个错误:

 mv: failed to access 'foo/': Not a directory 

自动删除斜杠

cpmv有一个特别的选择,通过剥离src dirs的斜线来减轻风险:

 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.