首页编程linux cp?linux中在复制一个目录时cp -a 和cp -r有什么区别

linux cp?linux中在复制一个目录时cp -a 和cp -r有什么区别

编程之家2023-11-0774次浏览

朋友们,linux cp和linux中在复制一个目录时cp -a 和cp -r有什么区别是当今热门话题,但是它们的内涵和影响力可能会让人感到困惑。在本篇文章中,我将为你们揭示它们的本质和重要性,希望能够为你们带来新的认识。

linux cp?linux中在复制一个目录时cp -a 和cp -r有什么区别

linux中cp 命令使用介绍

。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。这说明命令行和shell脚本的执行方式有些不同。

1.命令格式:

用法:

cp [选项]... [-T]源目的

或:cp [选项]...源...目录

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

linux cp?linux中在复制一个目录时cp -a 和cp -r有什么区别

2.命令功能:

将源文件复制至目标文件,或将多个源文件复制至目标目录。

3.命令参数:

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

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

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

linux cp?linux中在复制一个目录时cp -a 和cp -r有什么区别

--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 复制目录及目录内的所有项目

4.命令实例:

实例一:复制单个文件到目标目录,文件在目标文件中不存在

命令:

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参数时,两个文件的时间是一致的。

实例二:目标文件存在时,会询问是否覆盖

命令:

cp log.log test5

输出:

复制代码

  

代码如下:

[root@localhost test]# cp log.log test5

  cp:是否覆盖“test5/log.log”? n

  [root@localhost test]# cp-a 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标志,也还会询问是否覆盖。

实例三:复制整个目录

命令:

输出:

目标目录存在时:

复制代码

  

代码如下:

[root@localhost test]# cp-a test3 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 3 root root 4096 10-28 15:11 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:48 log.log

  drwxrwxrwx 2 root root 4096 10-28 14:47 test3

目标目录不存在是:

复制代码

  

代码如下:

[root@localhost test]# cp-a test3 test4

  [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

  drwxrwxrwx 2 root root 4096 10-28 14:47 test4

  drwxr-xr-x 3 root root 4096 10-28 15:11 test5

  [root@localhost test]#

说明:

注意目标目录存在与否结果是不一样的。目标目录存在时,整个源目录被复制到目标目录里面。

实例四:复制的 log.log建立一个连结档 log_link.log

命令:

cp-s log.log log_link.log

输出:

复制代码

  

代码如下:

[root@localhost test]# cp-s log.log log_link.log

  [root@localhost test]# ll

  lrwxrwxrwx 1 root root 7 10-28 15:18 log_link.log- log.log

  -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

  drwxrwxrwx 2 root root 4096 10-28 14:47 test4

  drwxr-xr-x 3 root root 4096 10-28 15:11 test5

说明:

那个 log_link.log是由-s的参数造成的,建立的是一个『快捷方式』,所以您会看到在文件的最右边,会显示这个文件是『连结』到哪里去的!

Linux 复制 cp 命令详解

cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。

-a:此参数的效果和同时指定"-dpR"参数相同;

-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;

-f:强行复制文件或目录,不论目标文件或目录是否已存在;

-i:覆盖既有文件之前先询问用户;

-l:对源文件建立硬连接,而非复制文件;

-p:保留源文件或目录的属性;

-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;

-s:对源文件建立符号连接,而非复制文件;

-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;

-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;

-b:覆盖已存在的文件目标前将目标文件备份;

-v:详细显示命令执行的操作。

linux中在复制一个目录时cp -a 和cp -r有什么区别

cp文件时候可以不用加参数,但是cp文件夹的时候必须加-R或-r,操作方法如下:

1、首先打开linux,使用cp的命令格式

2、这里移动文件1234.txt,ls-l//显示当前文件夹下所有文件的信息。

3、复制1234.txt文件到新文件2345.txt,copy 1234.txt 2345.txt,这里可以看到两个文件大小相同,时间戳不同。

4、复制1234.txt文件到新文件3456.txt并保持时间戳相同。

5、最后复制目录到新的目录需要加上选项-r,cp-r test python,就可以了。

文章到此结束,希望我们对于linux cp的问题能够给您带来一些启发和解决方案。如果您需要更多信息或者有其他问题,请随时联系我们。

软文外链代发,软文外链代发平台浅谈企业如何做好品牌推广工作cms(cms是什么意思)