Unix - 将一个目录的内容复制到另一个目录

92
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

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

谢谢!

3个回答

129

试试这个:

cp Folder1/* Folder2/

3
但是这不会复制隐藏文件,对吗? - Fabrizio Regini
9
没问题。cp -R会递归复制,所以您可能需要根据需要使用它。如果只想复制隐藏文件,可以使用命令cp Folder1/.* Folder2/ - Geoff
2
请注意,如果您正在使用“sudo”或等效工具,并且目录包含大量文件,则此操作将失败。我收到了“sudo:无法执行/bin/cp:参数列表太长”的错误提示。 - Nathan Osman
请注意,SCP具有略微不同的语法,请参见此处: https://dev59.com/aF8d5IYBdhLWcg3w3FZk#26346339 - sivi
1
不要这样做。在Linux上使用“cp -rT src dest”,或在BSD上使用“cp -R src/ dest”。 - xpusostomos
显示剩余2条评论

50

非常简单,使用通配符 * 即可。

cp -r Folder1/* Folder2/

但根据你的示例,不需要使用递归,因此以下内容即可:

cp Folder1/* Folder2/

编辑:

或者跳过mkdir Folder2的部分,直接运行:

cp -r Folder1 Folder2

如果要执行 ls | sort -k1.5 | head -8 > folder1 这个命令,应该怎么做? - Pooja
1
你刚刚丢失了所有的隐藏文件。不要这样做。在Linux上使用“cp -rT src dest”,或在BSD上使用“cp -R src/ dest”。 - xpusostomos

23
为了制作完全相同的副本,使用“cp”命令时需加上“-a”参数以保留权限、所有权等信息。而“-r”则只会复制文件内容,但不一定保留其他信息。
复制文件的命令为: cp -av Source/* Dest/ (请确保Dest/目录已存在)
如果需要重复更新或确保复制所有点文件,则使用rsync命令是一个很好的选择: rsync -av --delete Source/ Dest/ 这种方法是可以被恢复的,即使在复制过程中终止也不会丢失数据。我喜欢使用“-v”选项因为它能让你看到正在发生的事情,但是也可以不加。

1
-v 是什么意思? - HattrickNZ
冗长的,只是为了观察正在发生的事情。 - Brian White
1
如果你有很多文件,使用"-v"选项可能需要一些时间。如果不需要输出,请只使用"-a"。 - Eyal Levin
1
你必须使用非常慢的网络连接才能通过文本输出减缓复制速度。即使如此,它很可能只是命令提示符的返回,而不是复制本身。 - Brian White
你丢失了隐藏文件。在Linux上执行“cp -rT src dest”,或在BSD上执行“cp -R src/ dest”。 - xpusostomos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接