【问题标题】:How do I copy folder with files to another folder in Unix/Linux? [closed]如何将包含文件的文件夹复制到 Unix/Linux 中的另一个文件夹? [关闭]
【发布时间】:2013-02-02 01:44:34
【问题描述】:

我在将包含该文件夹中文件的文件夹复制到另一个文件夹时遇到了一些问题。命令cp -r 不会复制文件夹中的文件。

【问题讨论】:

标签: linux cp


【解决方案1】:

您正在寻找的选项是-R

cp -R path_to_source path_to_destination/
  • 如果destination 不存在,则会创建它。
  • -R 表示 copy directories recursively。您也可以使用-r,因为它不区分大小写。
  • 要复制里面的所有内容源文件夹(符号链接、隐藏文件)而不复制源文件夹本身在源中使用-a 标志和尾随/. (根据@muni764's / @Anton Krug's comment):
cp -a path_to_source/. path_to_destination/

【讨论】:

  • 我想知道为什么 dockerfile 中的这个确切命令将所有源目录文件复制到目标,而不是只复制整个目录。
  • 我相信末尾的“/”会有所不同,这可能会解释您的经验。如果源包含尾部斜杠,它将仅复制目录中的内容。如果它不包含尾部斜杠,它也会复制目录,然后复制其中的内容。我的记忆是这种行为因命令而异,可能因操作系统而异。这里是a reference,提供更多信息。
  • 我会说如果你不想包含源并且你想确保所有内容都被复制(符号链接,隐藏文件)而不复制源父文件夹是使用 -ra source/.目的地。这将确保复制文件夹的内容,而不是复制父文件夹本身,这有时很方便。不同的是 /.
  • 如果要复制的目录是符号链接,这似乎也可以正常工作,这是我的用例。
  • 请注意cp -r src/. dest 来源中“斜线点”的重要性我知道有人提到它,但我似乎每次都想念它。
【解决方案2】:

您正在寻找cp 命令。您需要更改目录,以便您在尝试复制的目录之外。

如果您要复制的目录名为 dir1,并且您希望将其复制到您的 /home/Pictures 文件夹:

cp -r dir1/ ~/Pictures/

Linux 区分大小写,并且还需要在每个目录后加上/ 才能知道它不是文件。 ~ 是终端中的一个特殊字符,它会自动评估为当前用户的主目录。如果您需要知道您所在的目录,请使用命令pwd

当您不知道如何使用 Linux 命令时,可以通过键入来参考手册页:

man [insert command here]

在终端提示符下。

此外,要在终端中键入时自动完成长文件路径,您可以在开始键入路径后点击 Tab,您将看到选择,或者它将插入路径的剩余部分。

在答案中 Linux 和 Unix 之间有一个重要区别,因为对于 Linux(GNU 和 BusyBox)-R-r--recursive 都是等价的,如 this answer 中所述。对于可移植性,即 POSIX 合规性,您可能希望使用 -R,因为与 -r 存在一些依赖于实现的差异。阅读手册页以了解可能出现的任何特性非常重要(这是一个很好的用例,可以说明 POSIX 标准为何有用)。

【讨论】:

  • 为了进一步说明,这里的-r 选项将递归地复制目录。
  • OP 是否没有说明他正在使用cp -r 命令,但它没有正常工作?
  • 我包含有关联机帮助页信息的原因是这些标志可能取决于分发。但是,在大多数情况下,-r--recursive-R 似乎是等价的。它还会给出常见的陷阱等,这很好。
  • 如果你想便携地复制 DIRECTORY 而不仅仅是它的内容,请去掉源文件夹中的尾随破折号,即。 cp -r dir1 ~/Pictures/
  • src 末尾的斜线是 BSDism。 GNU Linux 等效项是 -T 标志。
【解决方案3】:

用途:

$ cp -R SRCFOLDER DESTFOLDER/

【讨论】:

  • 我就是这样做的,demo1_copy 不存在 $ ls demo1 demo3 README.md $ cp -R demo1/ demo1_copy/
猜你喜欢
  • 2019-06-23
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多