如何使用终端将文件夹的内容复制到其他目录中的另一个文件夹?


739

我正在尝试使用终端将一个文件夹的内容复制到另一个目录中的另一个文件夹。

有人可以为我提供实现此功能所需的命令行语法示例吗?

Answers:


1114

您可以使用以下命令将文件夹的内容复制/source到另一个现有文件夹/dest

cp -a /source/. /dest/

-a选项是改进的递归选项,它保留所有文件属性,还保留符号链接。

.在源路径的终点是一个特定的cp语法,允许复制所有文件和文件夹,包括隐藏的人。


@enzotib我正在尝试使用此命令将“下载/ textext”的内容复制到“〜/ .config / inkscape / extensions /”。使用命令输入“ cp -a/Downloads/textext/。/~/.config/inkscape/extensions/。” 但这不起作用
Funzies 2014年

@Funzies:您的命令可能应该是:cp -a ~/Downloads/textext/. ~/.config/inkscape/extensions/
enzotib

添加-p标记为以保留文件权限和时间戳。cp -ap /var/www/original.com/images/. /var/www/new.com/images/
Dylan Valade 2014年

3
@DylanValade:-a已经暗示--preserve=all,该宽度大于-p = --preserve=mode,ownership,timestamps
enzotib 2014年

1
@BennyNeugebauer:scp用于通过网络复制(通过ssh),并且仅加密通信通道,而不加密目标文件系统上的文件。
enzotib 2015年

129

另一个是rsync

rsync -r source/ destination

rsync的优点是:

  1. 初始同步后,它将仅复制已更改的文件。

  2. 您可以在网络上使用它,对于$ HOME中的文件(尤其是配置文件)来说很方便。


5
我认为您不需要星号。rsync -r source/ destination应该足够了,不是吗?
约书亚2015年

1
这一个是比较合适的:“rsync的-rtvp源/ *目的地”
shridutt科塔

-r不是作品隐藏的文件/文件夹
南摹VU

1
这将不会复制隐藏文件,因为bash仅将*扩展为非隐藏文件。@Joschua的解决方案更安全。
sauerburger 2017年

如果您使用结尾的/而不带*,则rsync将复制整个目录,包括隐藏文件,因此rync source/ dest显然,人们将需要自定义rsync命令以按需使用。
Panther

78

比方说你有一个文件夹名为文件夹1在您的~,内部的folder1是1个文件调用文件1和2个文件夹叫SUB1SUB2与其他文件和文件夹内他们每个人。

要复制所有内容~/folder1~/new_folder1您将使用

cp -r ~/folder1/. ~/new_folder1

new_folder1然后将包含中的所有文件和文件夹folder1

cp是使用终端复制的命令,-r使其递归(因此,当前目录+当前目录中的其他目录)~/folder1是原始文件夹,~/new_folder1是原始内部文件/文件夹的目标文件夹。


5
它不会捕获隐藏文件
Portablejim

1
谢谢布鲁诺!它帮助我理解了语法,尽管我不得不对其进行了一些更改(删除〜符号)。可能是因为目标文件夹位于/ opt中,该文件夹位于另一个文件系统中。还要感谢Portablejim记住隐藏文件的事情!
pandisvezia 2011年

4
拖延期很重要。没有它,有时它可能会创建一个新的子目录,~/new_folder1/folder1而不是复制其内容。
wisbucky 2015年

1
为什么不cp -r ~/folder1/* ~/new_folder1
Alex78191

@ Alex78191[root@ home]# mkdir food [root@ home]# cd food/ [root@ food]# mkdir .fruit [root@ food]# mkdir veggies [root@ food]# touch veggies/carrots [root@ food]# touch .fruit/apple [root@ food]# ls * carrots [root@ food]#
布鲁诺·佩雷拉

14

检查此http://www.cyberciti.biz/faq/copy-folder-linux-command-line/以获取有关复制文件夹的更多信息。希望这可以帮助。

cp Command

cp是用于复制文件和目录的Linux命令。语法如下:

cp source destination
cp dir1 dir2
cp -option  source destination
cp -option1 -option2  source destination

在此示例中,将/home/vivek/letters文件夹及其所有文件复制到/usb/backup目录:

cp -avr /home/vivek/letters /usb/backup

哪里,

-a :保留指定的属性,例如目录,文件模式,所有权,时间戳,如果可能的话,还保留其他属性:上下文,链接,xattr等。

-v :说明正在做什么。

-r:以递归方式复制目录。例

将名为/ tmp / conf的文件夹复制到/ tmp / backup:

$ cp -avr /tmp/conf/ /tmp/backup

3
这不是问题要问的。
AStopher

(将-r与-a一起使用是多余的;在gnu cp上-a与“ -dr --preserve = all”相同)
cristoper

1
cp:-R和-r选项不能一起指定。
IgorGanapolsky

4

简单的例子。

目录dir_1及其内容(_files_)复制到目录dir_2

cp -r ./dir_1 ./dir_2
# or
cp -r ./dir_1/ ./dir_2/
# Results in: ./dir_2/dir_1/_files_

仅将dir_1内容(_files_)复制到目录dir_2

cp -r ./dir_1/. ./dir_2
# or
cp -r ./dir_1/. ./dir_2/
# Results in: ./dir_2/_files_*

_files_ 是目录中实际文件的占位符。


2

如果有两个文件夹:(具有写权限)

drwxr-xr-x 4 vimal vimal  4096 Sep  9 12:17 .
drwxr-xr-x 3 root  root   4096 Aug 18 14:35 ..
drwxrwxrwx 6 vimal vimal  4096 Sep  9 12:15 DATA
drwxrwxrwx 7 vimal vimal  4096 Sep  9 12:15 PORTAL

如果您位于名为PORTAL的文件夹中,并且要复制另一个文件夹的所有内容,请在同一级别说DATA,那么您将

vimal@vimal-D3H:/var/www/html/PORTAL$ cp -a ../DATA/. .

您必须注意2个点。最后一个点表示在当前文件夹中复制

在/ DATA /之后的一个。表示要复制DATA文件夹中的所有CONTENTS,而不是DATA文件夹本身。

如果删除此结尾的“。” 来自/ DATA /

那么整个DATA文件夹将被复制到PORTAL(您要从中处理的文件夹)中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.