Linux中cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。之前有rm 删除,有mv移动。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。这说明命令行和shell脚本的执行方式有不同之处。
cp [选项]... [-T] 源 目标目录
或:
cp [选项]... 源... 目标目录
或:
cp [选项]... -t 目标目录 源...
将源文件复制至目标文件,或将多个源文件复制至目标目录。
命令:
cp test.txt testdir/
输出:
ubuntu@VM-4-14-ubuntu:~/cp$ tree
.
├── testdir
└── test.txt
1 directory, 1 file
ubuntu@VM-4-14-ubuntu:~/cp$ cp test.txt testdir/
ubuntu@VM-4-14-ubuntu:~/cp$ tree
.
├── testdir
│ └── test.txt
└── test.txt
1 directory, 2 files
说明:在没有带-a参数时,移动前后时间是不一样的。在带了-a参数时,两个文件的时间是一致的。
命令:
cp -i test.txt testdir/
输出:
ubuntu@VM-4-14-ubuntu:~/cp$ cp -i test.txt testdir/
cp: overwrite 'testdir/test.txt'?
说明:目标文件存在时,cp -i会询问是否覆盖。目标文件存在时,即使加了-f标志,也还会询问是否覆盖。
ubuntu@VM-4-14-ubuntu:~/cp$ ll
total 16
drwxrwxr-x 4 ubuntu ubuntu 4096 Jun 30 17:40 ./
drwx------ 9 ubuntu ubuntu 4096 Jun 30 17:30 ../
drwxrwxr-x 2 ubuntu ubuntu 4096 Jun 30 17:32 testdir/
drwxrwxr-x 2 ubuntu ubuntu 4096 Jun 30 17:40 testdir1/
-rw-rw-r-- 1 ubuntu ubuntu 0 Jun 30 17:35 test.txt
ubuntu@VM-4-14-ubuntu:~/cp$ cp -a testdir1 testdir
说明:注意目标目录存在与否结果是不一样的。目标目录存在时,整个源目录被复制到目标目录里面。
命令:
cp -s test.txt test-l.txt
输出:
cp: cannot create symbolic link 'test1.txt' to 'test2.txt': File exists
ubuntu@VM-4-14-ubuntu:~/cp$ cp -s test2.txt test1.txt
cp: cannot create symbolic link 'test1.txt' to 'test2.txt': File exists
ubuntu@VM-4-14-ubuntu:~/cp$ cp -s test.txt test-l.txt
ubuntu@VM-4-14-ubuntu:~/cp$ ll
total 16
drwxrwxr-x 4 ubuntu ubuntu 4096 Jun 30 17:48 ./
drwx------ 9 ubuntu ubuntu 4096 Jun 30 17:30 ../
-rw-rw-r-- 1 ubuntu ubuntu 0 Jun 30 17:43 test1.txt
-rw-rw-r-- 1 ubuntu ubuntu 0 Jun 30 17:43 test2.txt
-rw-rw-r-- 1 ubuntu ubuntu 0 Jun 30 17:47 test4.txt
drwxrwxr-x 3 ubuntu ubuntu 4096 Jun 30 17:41 testdir/
drwxrwxr-x 2 ubuntu ubuntu 4096 Jun 30 17:40 testdir1/
lrwxrwxrwx 1 ubuntu ubuntu 8 Jun 30 17:48 test-l.txt -> test.txt
-rw-rw-r-- 1 ubuntu ubuntu 0 Jun 30 17:35 test.txt
注意:这种连接档,是复制一个去建立,因此被建立(目标文件)一定是不存在才能执行成功。