cp - copy files and directories
拷贝文件或目标文件夹,默认不能直接拷贝目录,通过-r参数设置递归复制目录 copy
语法:
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
参数:
- -r 递归,用于复制目录
- -a 和-dR --preserve 一样,表示all,将所有内容(目录或文件)复制,相当于-pdr
- -p 连同档案的属性一起复制过去,而非使用默认属性;
- -d 若源文件为链接文件link file,则复制链接文件属性而非档案本身;
- -f 强制,若目标档案已经存在且无法开启,则移除后再尝试;
- -i 若目标文件已经存在时,在覆盖时会先询问;
- -u 若目标文件存在,则目标文件比源文件旧时才复制
提示:如果源文件是多个,那么目标文件在最后,且是目录。
拷贝文件覆盖不提示,直接执行的两个方法:\cp 或/bin/cp
通过\cp可以屏蔽cp的alias(别名)功能。因为alias cp='cp-i',通过'\'屏蔽'-i'再次询问功能。
cp命令默认是不会提示overwrite的,但是cp的-i选项会提示,而一般Linux的用户环境文件~/.bashrc中会把cp命名为alias cp='cp -i'。
这样在Linux下输入cp命令实际上运行的是cp -i,加上一个“\”符号或者写cp全路径/bin/cp就是让此次的cp命令不适用别名(cp -i)运行。
[root@oldboy tmp]# cat /tmp/test.txt 1 2 3 4 [root@oldboy tmp]# \cp /mnt/test.txt /tmp/test.txt # 取消提醒,直接复制(覆盖原文件内容) [root@oldboy tmp]# cat /tmp/test.txt this is a test file Done
使用/bin/cp就是使用**全路径**,而不使用“别名alias”
[root@oldboy tmp]# echo "append a line">>/mnt/test.txt [root@oldboy tmp]# cat /mnt/test.txt this is a test file Done append a line [root@oldboy tmp]# /bin/cp /mnt/test.txt /tmp/test.txt [root@oldboy tmp]# cat /tmp/test.txt this is a test file Done append a line
提示:具体的别名,可以通过alias命令查看
文件备份的一般做法:
cp /etc/ssh/sshd_config{,.ori}
这个命令经过bash解析就会变成:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori
所以,这两种表达方式是等价的。
A{B,C} 经由 bash 解析会变成 AB AC。
如: 复制 目录dir1,另存为 dir10。这种用大括号{}和逗号分隔的表达方式
cp -a dir{1,10}