cp

 程序包: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
一切代码都是为了生活,一切生活都是调剂
原文地址:https://www.cnblogs.com/argor/p/7909956.html