【Linux常见命令】cp命令

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}

猜你喜欢

转载自www.cnblogs.com/zoe233/p/11815478.html