【问题标题】:Unix - copy contents of one directory to another [closed]Unix - 将一个目录的内容复制到另一个[关闭]
【发布时间】:2012-10-12 18:13:07
【问题描述】:
Folder1/
    -fileA.txt
    -fileB.txt
    -fileC.txt

> mkdir Folder2/

> [copy command]

现在Folder2/ 看起来像:

Folder2/
    -fileA.txt
    -fileB.txt
    -fileC.txt   

如何做到这一点?我试过cp -r Folder1/ Folder2/,但最终得到:

Folder2/
    Folder1/
        -fileA.txt
        -fileB.txt
        -fileC.txt

这很接近,但不完全是我想要的。

谢谢!

【问题讨论】:

    标签: file unix copy directory


    【解决方案1】:

    要制作准确的副本、权限、所有权以及所有内容,请使用“-a”和“cp”。 "-r" 将复制文件的内容,但不一定保持其他内容相同。

    cp -av 源/* 目标/

    (确保 Dest/ 先存在)

    如果您想从一个到另一个重复更新或确保您还复制所有点文件,rsync 是一个很好的帮助:

    rsync -av --delete Source/Dest/

    这也是“可恢复的”,因为如果您在复制时中止它,您可以重新启动它。我喜欢“-v”,因为它可以让你看到正在发生的事情,但你可以省略它。

    【讨论】:

    • -v 是干什么用的?
    • 冗长,只是为了看看发生了什么。
    • 如果您有很多文件,-v 选项可能需要一些时间。如果您不需要输出,请仅使用 -a
    • 您必须在相当慢的网络连接上运行才能使副本因文本输出而减慢。即便如此,它也可能只是命令提示符的返回,而不是副本本身。
    • 您丢失了隐藏文件。在 Linux 上执行“cp -rT src dest”,在 BSD 上执行“cp -R src/dest”。
    【解决方案2】:

    试试这个:

    cp Folder1/* Folder2/
    

    【讨论】:

    • 但这不会复制隐藏文件,对吧?
    • 正确。 cp -R 会,但这会递归复制,所以你可能想也可能不想使用它。您可以通过cp Folder1/.* Folder2/ 仅复制隐藏文件。
    • 请注意,如果您使用“sudo”或等效项并且目录包含大量文件,这将失败。我得到sudo: unable to execute /bin/cp: Argument list too long
    • 请注意,SCP 的语法略有不同,请参见此处:stackoverflow.com/a/26346339/1984636
    • 不要这样做。在 Linux 上执行“cp -rT src dest”,在 BSD 上执行“cp -R src/dest”。
    【解决方案3】:

    很简单,带有* 通配符。

    cp -r Folder1/* Folder2/
    

    但根据您的示例,不需要递归,因此以下内容就足够了:

    cp Folder1/* Folder2/
    

    编辑:

    或跳过mkdir Folder2 部分并运行:

    cp -r Folder1 Folder2
    

    【讨论】:

    • 如果ls | sort -k1.5 | head -8 > folder1 那怎么办?
    • 您刚刚丢失了所有隐藏文件。不要这样做。在 Linux 上执行“cp -rT src dest”,在 BSD 上执行“cp -R src/dest”。
    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 2015-03-20
    • 1970-01-01
    • 2020-09-06
    • 2017-05-29
    • 2021-09-02
    • 2011-01-04
    相关资源
    最近更新 更多