zoukankan      html  css  js  c++  java
  • (转)每天一个linux命令(8):cp 命令,复制文件和文件夹

    场景:自动部署脚本中为了部署方便,将配置文件放在服务器端,每次部署都使用服务端的配置文件覆盖上传上去的配置文件。

    cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。

    一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数

    但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。

    这说明命令行和shell脚本的执行方式有些不同。 

    1 命令格式

    用法:

     cp [选项]... [-T] 源 目的
    
           或:cp [选项]... 源... 目录
    
           或:cp [选项]... -t 目录 源...

    命令功能:将源文件复制至目标文件,或将多个源文件复制至目标目录。

    2 命令参数

    -a, --archive    等于-dR --preserve=all

        --backup[=CONTROL    为每个已存在的目标文件创建备份

    -b                类似--backup 但不接受参数

       --copy-contents        在递归处理是复制特殊文件内容

    -d                等于--no-dereference --preserve=links

    -f, --force        如果目标文件无法打开则将其移除并重试(当 -n 选项

                        存在时则不需再选此项)

    -i, --interactive        覆盖前询问(使前面的 -n 选项失效) (要想询问,最好带上该参数)

    -H                跟随源文件中的命令行符号链接

    -l, --link            链接文件而不复制

    -L, --dereference   总是跟随符号链接

    -n, --no-clobber   不要覆盖已存在的文件(使前面的 -i 选项失效)

    -P, --no-dereference   不跟随源文件中的符号链接

    -p                等于--preserve=模式,所有权,时间戳

        --preserve[=属性列表   保持指定的属性(默认:模式,所有权,时间戳),如果

                   可能保持附加属性:环境、链接、xattr 等

    -R, -r, --recursive  复制目录及目录内的所有项目

    3 命令实例

    3.1 实例一

    复制单个文件到目标目录,文件在目标文件中不存在

    命令:

    cp log.log test5

    输出:

    [root@localhost test]# cp log.log test5
    [root@localhost test]# ll
    -rw-r--r-- 1 root root    0 10-28 14:48 log.log
    drwxr-xr-x 6 root root 4096 10-27 01:58 scf
    drwxrwxrwx 2 root root 4096 10-28 14:47 test3
    drwxr-xr-x 2 root root 4096 10-28 14:53 test5
    [root@localhost test]# cd test5
    [root@localhost test5]# ll
    -rw-r--r-- 1 root root 0 10-28 14:46 log5-1.log
    -rw-r--r-- 1 root root 0 10-28 14:46 log5-2.log
    -rw-r--r-- 1 root root 0 10-28 14:46 log5-3.log
    -rw-r--r-- 1 root root 0 10-28 14:53 log.log

    说明:

    在没有带-a参数时,两个文件的时间是不一样的。在带了-a参数时,两个文件的时间是一致的。 

    3.2 实例二

    目标文件存在时,会询问是否覆盖

    命令:

    cp -i log.log test5

    输出:

    [root@localhost test]# cp -i log.log test5
    cp:是否覆盖“test5/log.log”? n
    [root@localhost test]# cp -ai log.log test5
    cp:是否覆盖“test5/log.log”? y
    [root@localhost test]# cd test5/
    [root@localhost test5]# ll
    -rw-r--r-- 1 root root 0 10-28 14:46 log5-1.log
    -rw-r--r-- 1 root root 0 10-28 14:46 log5-2.log
    -rw-r--r-- 1 root root 0 10-28 14:46 log5-3.log
    -rw-r--r-- 1 root root 0 10-28 14:48 log.log

    说明:

    目标文件存在时,会询问是否覆盖。这是因为cp是cp -i的别名。目标文件存在时,即使加了-f标志,也还会询问是否覆盖。

    3.3 实例三

    复制整个目录

    命令:

    cp -a folder1 folder2

     如果没有“-a”,会出现不能复制的情况???

    -a, --archive    等于-dR --preserve=all

    输出:

    目标目录存在时:将hh目复制到 he目录,此时he目录存在,在he目录的复制文件中,会包含hh这层目录

    目标目录不存在时候:将hh目录,复制到hg目录中,复制前不存在hg目录,此时不会复制hh这层目录。

    (相当于再复制一个目录并更改目录的名字)

    说明:注意目标目录存在与否结果是不一样的。

    • 目标目录存在时,整个源目录被复制到目标目录里面,相当于复制目录但名称不变

    web目录下新建cpweb目录,目标——将simubankweb-1025复制到cpweb目录中

    cp -a simubankweb-1025 cpweb

    结果——

    • 目标目录不存在时候,相当于复制目录并更名目录

    在web目录下,目标——将simubankweb-1025目录复制一份并重命名为simubankweb-vab

    cp -a simubankweb-1025 simubankweb-vba

    结果——

     总结:目的目录存在,源目录复制后源目录名字保持不变。

    目的目录不存在,源目录复制后变更名称为目的目录。

    3.4 实例四。

    复制的 log.log 建立一个连结档 log_link.log

    命令:

    cp -s log.log log_link.log

    输出:

     4 实战

    我想把我的某个目录下的某个文件夹复制(如:/tmp/a,啊是文件夹名称)到某个目录下(如:/root/a,文件夹还是叫a),请问应该怎么在命令行下操作?谢谢

    CP命令
    格式: CP [选项]  源文件或目录   目的文件或目录
    选项说明:-b 同名,备分原来的文件
            -f 强制覆盖同名文件
            -r  按递归方式保留原目录结构复制文件
    
    cp     -r         /tmp/a              /root/a
    记得有空格

    linux 怎么样复制文件夹内所有文件到另一个文件夹?

    cp -Rf /home/user1/* /root/temp/
    将 /home/user1目录下的所有东西拷到/root/temp/下而不拷贝user1目录本身。
    即格式为:cp -Rf 原路径/ 目的路径/

    mv移动某个文件夹到另外一个文件夹下

    注意点:移动文件夹的话就不要再加 / 了,如下图那样。如果是移动文件夹下的所有文件的话就可以文件夹后面跟上 /* 

  • 相关阅读:
    HDU1029 Ignatius and the Princess IV
    UVA11039 Building designing【排序】
    UVA11039 Building designing【排序】
    POJ3278 HDU2717 Catch That Cow
    POJ3278 HDU2717 Catch That Cow
    POJ1338 Ugly Numbers(解法二)
    POJ1338 Ugly Numbers(解法二)
    UVA532 Dungeon Master
    UVA532 Dungeon Master
    POJ1915 Knight Moves
  • 原文地址:https://www.cnblogs.com/lixuwu/p/5969237.html
Copyright © 2011-2022 走看看