程序包:GNU coreutils
语法:
复制命令,可以有多个源和一个目标,此刻该目标必须是个目录;否则就只能是一个源、一个目标。
cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE...
选项: 包含公共选项
-L,复制链接文件的目标文件到指定位置,目标文件不再是链接文件。
-P,复制链接文件的时候,目标文件仍然是个链接文件。
-d,同大写“P”。
-r,同大写“R”。
-R,递归复制。
-a,同“-dR”,归档复制,保留文件原有属性复制,常用于备份。
-f,强制覆盖。
-i,覆盖提示。
1.复制
“cp可以将一个文件复制到另一个文件,或将任意多个文件复制到目标目录。”
① 复制普通文件,默认覆盖目标文件
$ cat file1 file2 # 目标文件存在 file1 file2 $ cp file1 file2 $ cat file2 # 目标文件被覆盖,默认没有提示信息 file1
② -t 选项指定目标是个目录
$ cp -t file1 file2 cp: target ‘file1’ is not a directory $ cp -t des file2 $ cp -t des src cp: omitting directory ‘src’ $ tree . ├── des │ ├── d1 │ ├── d2 │ ├── d3 │ ├── d4 │ └── file2 ├── file1 ├── file2 └── src ├── s1 ├── s2 └── s3 $ cp -T file1 des cp: cannot overwrite directory ‘des’ with non-directory
2.处理目录
默认情况下,cp不能把目录文件作为源文件进行复制。需要复制目录时,需要使用选项-R、-a、-r,进入目录里边递归地把文件复制到目标目录。
选项“-R, -r, --recursive”,一个意思:递归复制目录。
[view@payqa1 .tmp]$ cp src des/ cp: omitting directory `src' [view@payqa1 .tmp]$ cp -r src des/ [view@payqa1 .tmp]$ tree des/ des/ ├── d1 ├── d2 ├── d3 └── src ├── s1 ├── s2 └── s3 1 directory, 6 files
选项“-a, --archive”,就是“-dR --preserve=all”。处理目录起始也是用了“-r”选项。
3.符号链接
复制符号链接时,会复制链接标目文件;当使用了递归选项、--link(-l)时,复制的是个链接文件。
# 1 符号链接是相对路径时、绝对路径,复制效果一样 $ ln -s file1 f1 $ cp f1 des $ file des/f1 f1 des/f1: ASCII text f1: symbolic link to `file1' # 2 复制效果一样,相对路径失效 $ ln -s fil2 src/f2 $ cp -r src des $ file des/src/f2 des/src/f2: broken symbolic link to `fil2' $ cat des/src/f2 cat: des/src/f2: No such file or directory