本文共 1736 字,大约阅读时间需要 5 分钟。
目录
cp命令用来完成复制的任务。它可以将系统中的文件或目录从一个位置复制到另一个位置。
在最基本的用法里,cp命令需要两个参数,源文件和目标文件:
cp
此时cp命令将源文件(source_file)复制成一个新文件,并且以destination命名。新文件就像全新的文件一样,有新的修改时间。
例如,将目录中的rsa.conf复制到当前目录下,新的文件名叫做rsa_clone.ini:
$ lltotal 8drwxr-xr-x 3 root staff 96 2 24 18:13 ./drwxr-xr-x+ 86 root staff 2752 3 8 18:42 ../-rw-r--r-- 1 root staff 48 2 24 18:13 rsa.conf$ cp rsa.conf rsa_clone.ini$ lltotal 16drwxr-xr-x 4 root staff 128 3 8 18:42 ./drwxr-xr-x+ 86 root staff 2752 3 8 18:42 ../-rw-r--r-- 1 root staff 48 2 24 18:13 rsa.conf-rw-r--r-- 1 root staff 48 3 8 18:42 rsa_clone.ini
如果复制后的新文件名称在目标目录中已存在,cp命令会覆盖掉原来的文件:
$ lltotal 16drwxr-xr-x 4 root staff 128 3 8 18:42 ./drwxr-xr-x+ 89 root staff 2848 3 23 21:33 ../-rw-r--r-- 1 root staff 48 2 24 18:13 rsa.conf-rw-r--r-- 1 root staff 48 3 8 18:42 rsa_clone.ini$ cp rsa.conf rsa_clone.ini$ lltotal 16drwxr-xr-x 4 root staff 128 3 8 18:42 ./drwxr-xr-x+ 89 root staff 2848 3 23 21:33 ../-rw-r--r-- 1 root staff 48 2 24 18:13 rsa.conf-rw-r--r-- 1 root staff 48 3 23 21:33 rsa_clone.ini
可以看到这种场景下cp命令不会报错,而是直接将原来的rsa_clone.ini文件覆盖掉了(最后修改时间发生了变化)。
加上-i选项可以强制shell询问是否需要覆盖已有文件。如果不回答y,文件复制过程中断:
$ cp -i rsa.conf rsa_clone.inioverwrite rsa_clone.ini? (y/n [n]) nnot overwritten
总结:
使用如下的命令可以强制shell检查复制文件是否会造成覆盖已有文件的现象出现:
cp -i
使用如下的命令可以将一个文件复制到一个目录中:
cp
例如:
$ cp rsa.conf sub$ ls -l sub/total 8-rw-r--r-- 1 root staff 48 3 23 21:57 rsa.conf
新文件就在sub目录中了,和源文件同名。
使用man cp查阅cp文档
man cp
使用 cp -R <目录名> <新目录名> 可以递归地复制整个目录的内容。
cp -R
例如将目录d1复制,新复制后的目录名为d2
$ cp -R d1 d2
💡提示:在目录d2事先并不存在,它是被cp -R命令创建的。在新的目录d2中,所有文件都有了新的日期。d2目录现在已经成为了d1目录的完整副本。
转载地址:http://mbsoi.baihongyu.com/