您的位置:首页 > 运维架构 > Linux

Linux 命令(文件和目录管理 - cp)

2016-10-19 16:55 232 查看

简述

cp 命令用来复制文件或目录。当复制多个文件时,目标文件参数必须为已经存在的目录。cp 命令默认不能复制目录,复制目录必须使用 -R 选项。

简述

命令介绍

命令选项

使用范例

命令介绍

命令名称

cp

命令全称

copy

基本语法

cp [选项]… [-T] 源文件 目标文件

或:cp [选项]… 源文件… 目录

或:cp [选项]… -t 目录 源文件…

功能描述

将源文件复制至目标文件,或将多个源文件复制至目标目录。

命令选项

选项说明
-a, --archive
等于
-dR --preserve=all
--backup[=CONTROL]
为每个已存在的目标文件创建备份
-b
类似
--backup
,但不接受参数
-d
等于
--no-dereference --preserve=links
-f, --force
强行复制文件或目录,不论目标文件或目录是否已存在。
-i, --interactive
覆盖既有文件之前先询问用户
-l, --link
对源文件建立硬连接,而非复制文件。
-n, --no-clobber
不要覆盖已存在的文件(使前面的
-i
选项失效)
-P, --no-dereference
不跟随源文件中的符号链接
-p, --preserve
保留源文件或目录的属性(默认:模式、所有权、时间戳)
-R, -r, --recursive
递归复制目录及其子目录内的所有内容
-s, --symbolic-link
只创建符号链接而不复制文件
-S, --suffix=SUFFIX
自行指定备份文件的后缀
-t, --target-directory=DIRECTORY
将所有参数指定的源文件/目录复制至目标目录
-T, --no-target-directory
将目标目录视作普通文件
-u, --update
当目标文件不存在,或者源文件比目标文件新时,才执行复制操作。
-v, --verbose
显示详细的进行步骤
--help
在标准输出上显示帮助信息并退出
--version
在标准输出上显示版本信息并退出

使用范例

1.不带任何参数下,运行 cp

这是 cp 命令最基础的使用,将文件从一个位置到另一个位置。

[wang@localhost c++]$ ls *.c
hello.c
[wang@localhost c++]$ ls /home/wang/script/
[wang@localhost c++]$ cp hello.c /home/wang/script/
[wang@localhost c++]$ ls *.c
hello.c
[wang@localhost c++]$ ls /home/wang/script/
hello.c


注意:和 mv 命令不同的是:cp 拷贝后,原文件依然存在。

2.同时拷贝多个文件

要同时拷贝多个文件,只需要将多个文件用空格隔开。

[wang@localhost c++]$ ls /home/wang/script/
hello.c
[wang@localhost c++]$ cp qt5_cadaques.pdf qwt.pdf /home/wang/script/
[wang@localhost c++]$ ls /home/wang/script/
hello.c  qt5_cadaques.pdf  qwt.pdf


3.拷贝一个目录

要拷贝一个目录,需要添加
-r
或者
-R
选项来递归实现。

[wang@localhost doc]$ tree linux/
linux/
└── linux-program.pdf

0 directories, 1 file
[wang@localhost doc]$ tree /home/wang/script/
/home/wang/script/
├── hello.c
├── qt5_cadaques.pdf
└── qwt.pdf

0 directories, 3 files
[wang@localhost doc]$ cp -r linux/ /home/wang/script/
[wang@localhost doc]$ tree /home/wang/script/
/home/wang/script/
├── hello.c
├── linux
│   └── linux-program.pdf
├── qt5_cadaques.pdf
└── qwt.pdf

1 directory, 4 files


4.创建文件的硬链接,而不是拷贝

拷贝文件意味着必须使用一些存储空间来储存拷贝的文件。有时候出于某种原因,可能想要创建“快捷方式”或者链接到文件,而不是拷贝。要做到这一点,可以使用
-l
选项。

[wang@localhost doc]$ ls -lvi debug.log
4243086 -rw-rw-r--. 1 wang wang 368640 9月  30 16:23 debug.log
[wang@localhost doc]$ cp -l debug.log /home/wang/script/
[wang@localhost doc]$ ls -lvi /home/wang/script/debug.log
4243086 -rw-rw-r--. 2 wang wang 368640 9月  30 16:23 /home/wang/script/debug.log


可以看出,我们看到 debug.log 的硬链接已经拷贝到 /home/wang/script/目录下,并标记有同样的 inode 4243086。

5.创建文件的符号链接

如果要创建软链接(符号链接),用
-s
选项来实现。

[wang@localhost doc]$ cp -s /home/wang/script/debug.log debug_link.log
[wang@localhost doc]$ ls -l debug_link.log
lrwxrwxrwx. 1 wang wang 27 10月 19 15:59 debug_link.log -> /home/wang/script/debug.log


注意:创建符号链接只能在当前目录下进行。

6.不随符号链接拷贝原文件

只拷贝符号链接文件,可以用
-P
选项来实现。当对符号链接使用 cp 命令,它会照原样拷贝它自身。

[wang@localhost doc]$ ls -l debug_link.log
lrwxrwxrwx. 1 wang wang 27 10月 19 15:59 debug_link.log -> /home/wang/script/debug.log
[wang@localhost doc]$ cp -P debug_link.log debug_link2.log
[wang@localhost doc]$ ls -l debug_link2.log
lrwxrwxrwx. 1 wang wang 27 10月 19 16:06 debug_link2.log -> /home/wang/script/debug.log


显然,cp 命令照原样拷贝 debug_link.log 自身,文件类型仍然是一个符号链接。

7.随符号链接拷贝原文件

可以试一下
-L
选项。基本上,这个刚好与上面的
-P
选项相反。

[wang@localhost doc]$ ls -l debug_link.log
lrwxrwxrwx. 1 wang wang 27 10月 19 15:59 debug_link.log -> /home/wang/script/debug.log
[wang@localhost doc]$ cp -L debug_link.log debug_link3.log
[wang@localhost doc]$ ls -l debug_link3.log
-rw-rw-r--. 1 wang wang 368640 10月 19 16:09 debug_link3.log


使用这个选项,拷贝的文件将会和 debug_link.log 原文件一样。可以从文件大小看出来。拷贝的文件有 368640 字节,而当 debug_link.log 作为符号链接时文件大小只有 27 字节。

8.文件归档

当拷贝一个目录时,会用
-r
或者
-R
选项。但是也可以用
-a
选项来归档文件。这样会创建文件和目录的准确套录,如果有的话也可以包括符号链接。

[wang@localhost ~]$ ls -l doc
总用量 360
drwxrwxr-x. 2 wang wang     57 10月 19 15:54 c++
lrwxrwxrwx. 1 wang wang     27 10月 19 15:59 debug_link.log -> /home/wang/script/debug.log
-rw-rw-r--. 1 wang wang 368640 10月 19 15:53 debug.log
drwxrwxr-x. 2 wang wang     30 10月 19 15:53 linux
[wang@localhost ~]$ cp -a doc /home/wang/program/
[wang@localhost ~]$ ls -l /home/wang/program/doc/
总用量 360
drwxrwxr-x. 2 wang wang     57 10月 19 15:54 c++
lrwxrwxrwx. 1 wang wang     27 10月 19 15:59 debug_link.log -> /home/wang/script/debug.log
-rw-rw-r--. 1 wang wang 368640 10月 19 15:53 debug.log
drwxrwxr-x. 2 wang wang     30 10月 19 15:53 linux


上列的命令会拷贝一个名为 doc 的目录到 /home/wang/program 目录下,debug_link.log 依然作为符号链接被复制。

9.显示详细的进行步骤

默认情况下,当拷贝成功时,仅会再次看到命令提示符。如果想了解在拷贝文件时都发生了什么,可以用
-v
选项。

[wang@localhost c++]$ cp -v *.pdf /home/wang/program/
"qt5_cadaques.pdf" -> "/home/wang/program/qt5_cadaques.pdf"
"qwt.pdf" -> "/home/wang/program/qwt.pdf"


10.使用交互模式

使用
-i
选项,启用交互模式,会询问是否覆盖目标目录下的文件。

[wang@localhost c++]$ cp -i qwt.pdf /home/wang/program/
cp:是否覆盖"/home/wang/program/qwt.pdf"? y


11.创建备份文件

当目标目录已经含有同名文件,默认情况下 cp 命令会覆盖目标目录下的同名文件。使用
--backup
选项,cp 命令会为每一个现有的目标文件做一个备份。

[wang@localhost c++]$ cp -bv qwt.pdf /home/wang/program/
"qwt.pdf" -> "/home/wang/program/qwt.pdf" (备份:"/home/wang/program/qwt.pdf~")
[wang@localhost c++]$ ls -l /home/wang/program/
总用量 12400
drwxrwxr-x. 4 wang wang      65 10月 19 16:21 doc
-rw-r--r--. 1 wang wang 7484327 10月 19 16:27 qt5_cadaques.pdf
-rw-r--r--. 1 wang wang 2604948 10月 19 16:35 qwt.pdf
-rw-r--r--. 1 wang wang 2604948 10月 19 16:32 qwt.pdf~


目标目录下出现了名为 qwt.pdf 和 qwt.pdf~ 的文件,波浪符号(~)意味着文件是备份文件。从属性中可以看到,备份文件比 qwt.pdf 要旧。

12.只拷贝文件属性

选项
--attributes-only
,顾名思义,只会拷贝文件名及其属性,不会拷贝任何数据。

[wang@localhost c++]$ cp --attributes-only hello.c hello_attr_only.c
[wang@localhost c++]$ ls -l hello*
-rw-rw-r--. 1 wang wang  0 10月 19 16:41 hello_attr_only.c
-rw-rw-r--. 1 wang wang 60 10月 19 15:53 hello.c


可以看出,原文件 hello.c 有 60 字节大小,拷贝的文件只有 0 字节大小,这是因为文件内容并没有拷贝。

13.强制拷贝

使用
-f
选项会强制进行拷贝操作。如果目标文件不能打开,可以用
-f
尝试。

[wang@localhost c++]$ cp -fv hello.c hello2.c
"hello.c" -> "hello2.c"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息