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

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

#1 楼

您可以使用以下命令将文件夹/source的内容复制到另一个现有文件夹/dest-a选项是一种改进的递归选项,它保留了所有文件属性,并且还保留符号链接。

源路径末尾的.是特定的cp语法,允许复制所有文件和文件夹(包括隐藏的文件和文件夹)。

评论


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

–奖项
2014年2月5日在11:09



@DylanValade:-a已经隐含--preserve = all,它比-p = --preserve = mode,所有权,时间戳宽。

– Enzotib
2014年12月22日在16:22

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

– Enzotib
2015年7月9日在13:46

rm递归选项是-r cp是-a,亲爱的linux人们如何记住所有这些

– Pawel Cioch
16年3月3日在18:52

“源路径末尾的。是特定的cp语法,允许复制所有文件和文件夹,包括隐藏的文件和文件夹。”,这与cp不相关,但与bash有关。点表示“此位置”,并避免使用bash globing(默认情况下以/开头的文件/目录)。没有扩展。

–布鲁诺·佩雷拉(Bruno Pereira)
19年9月5日在12:13

#2 楼

另一个是rsync
rsync -a source/ destination

rsync的优点是:

初始同步后,它将仅复制已更改的文件。
您可以通过网络使用它,便于$ HOME中的文件,尤其是配置文件。


评论


我认为您不需要星号。 rsync -r源/目标应该足够了,不是吗?

–约书亚
15年12月17日在15:10

这个更合适:'rsync -rtvp source / * destination'

–shridutt kothari
16-09-16在14:14

-r不适用于隐藏的文件/文件夹

– Nam G VU
16-09-21在4:42

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

–绍堡
17年9月9日23:00

如果是大文件夹,则在复制askubuntu.com/questions/609303/…时,您可能希望使用以下选项之一查看进度。

–马修·洛克(Matthew Lock)
18年11月13日在5:19

#3 楼

假设您在~中有一​​个名为folder1的文件夹,folder1内有1个名为file1的文件,还有2个名为sub1和sub2的文件夹,每个文件夹中都有其他文件和文件夹。

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

cp -r ~/folder1/. ~/new_folder1


new_folder1将包含folder1的所有文件和文件夹。

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

评论


它不会捕获隐藏文件

–Portablejim
2011-12-11 13:04

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

– Pandisvezia
2011-12-11 15:51

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

– Wisbucky
2015年1月19日23:00

为什么不使用cp -r〜/ folder1 / *〜/ new_folder1

–Alex78191
18年7月24日在10:59

@ Alex78191 [root @ home]#mkdir food [root @ home]#cd food / [root @ food]#mkdir .fruit [root @ food]#mkdir蔬菜[root @ food]#触摸蔬菜/胡萝卜[root @ food ]#触摸.fruit / apple [root @ food]#ls *胡萝卜[root @ food]#

–布鲁诺·佩雷拉(Bruno Pereira)
18年7月24日在11:19



#4 楼

简单示例。
将目录dir_1及其内容(文件)复制到目录dir_2:
cp -r ./dir_1 ./dir_2
# or
cp -r ./dir_1/ ./dir_2/
# Results in: ./dir_2/dir_1/_files_

仅复制dir_1的内容(文件)到目录dir_2:
cp -r ./dir_1/. ./dir_2
# or
cp -r ./dir_1/. ./dir_2/
# Results in: ./dir_2/_files_

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

#5 楼

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

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

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


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

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


在哪里,

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

-a:说明正在执行的操作。

-v:递归复制目录。
示例

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

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


评论


这不是问题要问的。

–AStopher
15年3月8日在13:18

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

– cristoper
18年2月14日在16:35

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

– IgorGanapolsky
18/12/19在23:07

#6 楼

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

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的文件夹中,要在其中复制另一个文件夹的所有内容,请在同级
,那么您将要做

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

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

和/ DATA /之后的

。表示要复制DATA文件夹中的所有内容,而不是DATA文件夹本身。

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

,然后整个DATA文件夹将被复制到PORTAL内(您要从中应对)。

#7 楼

我喜欢此命令

rsync -av --progress ~/code/project-source/. ~/code/project-destination --exclude .git --exclude node_modules



下面列出了rsync命令中的一些常用选项:



-v,-详细:详细输出
-q,-安静:禁止显示消息输出
-a,-存档:同步时归档文件和目录(-an等于以下选项-rlptgoD )
-r,-递归:以递归方式同步文件和目录
-b,-backup:在同步期间进行备份
-u,-update:不要将文件从源复制到如果目标文件较新,则为目标
-l,-链接:在同步期间将符号链接复制为符号链接
-n,-空运行:在不同步的情况下进行试运行
-e,-rsh = COMMAND:提及要在rsync中使用的远程Shell,
-z,–compress:在传输期间压缩文件数据
-h,–人类可读:以人类可读的格式显示输出编号
–progress:显示传输过程中的同步进度