cp
复制目录和文件
对于系统管理员来说,在文件系统中将文件和目录从一个位置复制到另外一个位置是家常便饭,而cp就是可以煮饭的工具之一。
cp需要源对象和目标对象,源对象在前,目标对象在后面。
1. 常用选项
基本用法
[root@local tmp]# ll total 0 -rw-rw-r--. 1 gentoo gentoo 0 Jul 29 09:28 test.txt [root@local tmp]# stat test.txt File: `test.txt' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 1310723 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 500/ gentoo) Gid: ( 500/ gentoo) Access: 2016-07-29 09:29:03.019982074 -0400 Modify: 2016-07-29 09:28:08.737003238 -0400 Change: 2016-07-29 09:28:08.737003238 -0400 [root@local tmp]# cp test.txt / [root@local tmp]# stat test.txt File: `test.txt' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 1310723 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 500/ gentoo) Gid: ( 500/ gentoo) Access: 2016-07-29 09:29:03.019982074 -0400 Modify: 2016-07-29 09:28:08.737003238 -0400 Change: 2016-07-29 09:28:08.737003238 -0400 [root@local tmp]# ll test.txt -rw-rw-r--. 1 gentoo gentoo 0 Jul 29 09:28 test.txt
这是最基本的用法,但是这样复制有些时候会修改文件或者目录的相应属性,不想修改就用接下来的选项
-a 保留原来所以参数进行复制文件或目录,因为cp不同对象执行时会修所所属主,所属组,时间、权限等等属性,可是有些时候进行对于原文件进行备份是我们不希望修改这些熟悉,所以就需要用-a 选项(常用选项)
root@local tmp]# ll total 0 -rw-rw-r--. 1 gentoo gentoo 0 Jul 29 09:28 test.txt [root@local tmp]# stat test.txt File: `test.txt' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 1310723 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 500/ gentoo) Gid: ( 500/ gentoo) Access: 2016-07-29 09:28:08.737003238 -0400 Modify: 2016-07-29 09:28:08.737003238 -0400 Change: 2016-07-29 09:28:08.737003238 -0400 [root@local tmp]# cp -a test.txt /root/ [root@local tmp]# cd /root [root@local ~]# ll test.txt -rw-rw-r--. 1 gentoo gentoo 0 Jul 29 09:28 test.txt [root@local ~]# stat test.txt File: `test.txt' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 786444 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 500/ gentoo) Gid: ( 500/ gentoo) Access: 2016-07-29 09:28:08.737003238 -0400 Modify: 2016-07-29 09:28:08.737003238 -0400 Change: 2016-07-29 09:29:03.019982074 -0400
通过上面的实验,我们可以发现出来Change time改变,其他的属性均为改变。这就是-a选项的目的,不用-a选项都会修改,具体请自行尝试。
-i 若目标路径中存在原文件,会询问我们是否覆盖它
[root@local tmp]# cp -i /tmp/test.txt / cp: overwrite `/test.txt'? y [root@local tmp]# ll /test.txt -rw-r--r--. 1 root root 0 Jul 29 09:41 /test.txt
-f 强制覆盖,当我们复制一个文件到目标路径时,若原文件存在于目标路径中,我们可以使用-f 强制覆盖,并且不提醒我们。、
[root@local tmp]# cp -f /tmp/test.txt / [root@local tmp]#
–preserve[=ATTR_LIST] 用这个选项在复制过程选择时间戳,属主,权限是否保留
mode: 权限 ownership: 属主属组 timestamp: links xattr context all
-p: 等同–preserv=mode,ownership,timestamp
-u:仅仅当目标文件的内容比原文件新才进行复制
-R, -r, –recursive :复制当前目录及目录下面的文件一起
2.注意
SRC是文件:
如果目标不存在:新建DEST,并将SRC中内容填充至DEST中
如果目标存在:
1.DEST是文件:将SRC中的内容覆盖至DEST中基于安全,建议为cp命令使用-i选项
2.DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
复制文件和目录cp
cp SRC… DEST
SRC…:多个文件
DEST必须存在,且为目录,其它情形均会出错;
cp SRC DEST
SRC是目录:此时使用选项: -r 如果DEST不存在:则创建指定目录,复制SRC目录中所
有文件至DEST中;
如果DEST存在: 1. DEST是文件:报错 2.DEST是目录:
原创文章,作者:fighter,如若转载,请注明出处:http://www.178linux.com/26932