如何从 Linux 命令行复制文件夹?

如何从 Linux 命令行复制文件夹?

假设我在/通过 连接的远程 Linux 机器中的文件夹中ssh

有一个名为 的文件夹testapp

/testapp

我想创建这个的精确副本,称为:

/testapp-staging

使用 GUI,我只需右键单击文件夹,复制然后粘贴并重命名即可。

为此我需要使用什么命令?

答案1

使用cp命令,但要执行递归地

cp -R /some/dir/ /some/other/dir/

如果你想打印出每个复制的文件,-Rv

答案2

也可以通过使用rsync,例如:

rsync -vua src/ dst/

在哪里:

  • -v, --verbose:增加详细程度
  • -u, --update:跳过接收方较新的文件
  • -a, --archive:存档模式;等于-rlptgoD(否-H,-A,-X

如果您具有 root 权限,请使用前缀来sudo覆盖潜在的权限问题。

答案3

也有文本模式(控制台)文件管理器。午夜指挥官(命令mc)就是其中之一。

答案4

令人难以置信的是,在 stackoverflow 和 superuser 上,你可以找到很多令人困惑的帖子,这些帖子都与“cp”和“mv”命令有关。发帖者问“如何使用‘cp’?”人们对此发布了“cp”语法,但没有人说,哪个他们实际使用的“cp”或“mv”版本。仅供参考,实用程序套件,一个由 Berkeley 开发,另一个由 GNU 开发,它们的行为非常不同,因此,如果人们真正说明他们正在谈论哪个版本,那将会很有帮助,否则就像盲人与聋子交谈一样。

因此人们会告诉您使用“-R,-r,--recursive”标志来复制文件夹,只需查看上面内容,但这对我来说不起作用:

cp -av "/System/Library/Carrier Bundles/iPhone/EPlus_de.bundle/" /work/EPlus1/

cp -R "/System/Library/Carrier Bundles/iPhone/EPlus_de.bundle/" /work/EPlus1/

不是将文件夹“EPlus_de.bundle”复制到“/work/EPlus”,而是将“EPlus_de.bundle”内的所有文件复制到“/work/EPlus1/”,因此结构如下:

/work/EPlus1/files

不是

/work/EPlus1/EPlus_de.bundle/files

现在,有人会测试我的命令并声称“它确实有效!”是的,它在你的 GNU 版本上有效,但在 Berkeley 版本上不会按预期工作,因此上面提到递归标志的海报并不是特别有用,再说一次,原始海报从未提到他谈论的是什么版本。

伯克利:如果 FromFolder 末尾有一个斜杠(“/”),则会被解释为:

/*

所以基本上,Berkeley“cp”被告知将 FromFolder 中的所有文件复制到 ToFolder,而不是 FromFolder 本身。

https://www.freebsd.org/cgi/man.cgi?cp

如果源文件以 / 结尾,则复制目录的内容而不是目录本身。

然后,你再次在网上搜索如何复制文件夹,人们会告诉你:

cp -avr ...

当然,这会影响到伯克利版本,所以人们会说:“你错了,它不起作用!是的,它起作用了!”他们互相争论,因为他们谈论的是完全不同的程序。为什么 GNU 没有将他们的应用程序称为“cp2”或其他名称,这让我无法理解。

相关内容