欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

linux cp命令 mv命令 有大用 有大大用 有大大大用

shiping1 的头像


隐藏的文件不能复制 点开头的文件不能复制 

两条命令,加在一起就哦了, linux所谓的隐藏文件就是以点开头的, 所以.*就代表所有隐藏文件:

cp -r /home/test /root/tmp/
cp -r /home/test/.* /root/tmp/        #这里 .* 既包括当前目录下的所有,又包括上一级目录的所有


[root@mail tmp]# ls -la test/.*          #由此可见 .* 既包括当前目录,也包括上一级目录      

-rw-r--r-- 1 root root    0 10-22 17:31 test/.aa

test/.  :

总计 28

drwxr-xr-x 2 root root 4096 10-23 12:37 .

drwxrwxrwt 6 root root 4096 10-23 12:35 ..

-rw-r--r-- 1 root root    0 10-22 17:31 .aa

-rw-r--r-- 1 root root    0 10-22 17:31 bb.txt

test/..  :

总计 56

drwxrwxrwt  6 root  root  4096 10-23 12:35 .

drwxr-xr-x 31 root  root  4096 10-22 12:58 ..

drwxr-xr-x  2 root  root  4096 10-23 12:37 test

drwxrwxrwt  2 root  root  4096 10-22 17:34 test1

-rw-rw-rw-  1 mysql mysql  247 10-21 15:07 tutor.txt

[root@mail tmp]#


Linux – cp: omitting directory 复制文件失败:
注意,如果执行时出现”cp: omitting directory”的提示信息,但使用mv则可以成功剪切粘贴,是由于该目录下含有子目录,这个时候需要使用 cp -r 参数来递归拷贝这些及其子文件夹下的文件。

[root@linux tmp]# cp -r /etc/aaa/bbb /tmp/kkk/

但是 可以直接用  mv /etc/aaa/bbb /tmp/kkk/

mv命令没有递归的概念,-f 强制覆盖同名对象就可以了 mv直接就可以移动了
或者 使用 \mv 吧, 试一试吧 别名的概念(好像文件夹 还是 不能覆盖,只好用 cp 然后 删除了)

    cp -r /etc/aaa/bbb /tmp/kkk/  复制 的时候 是 整个目录 /etc/aaa/bbb 复制到 /tmp/kkk的下面


不同于复制命令,用 mv 命令移动目录相当直接。移动目录你可以使用不带选项的 mv 命令。看下面的截图就一目了然了。

Moving directory


 

  1. 把/home/wwwroot/sinozzz 里面的文件和文件夹等 复制到home/wwwroot/sinozzz123目录下
    cp -rf /home/wwwroot/sinozzz/. /home/wwwroot/sinozzz123  //这个好像对以.开头的文件是能够复制过来的 这个有大用
    cp -a /tmp/dira/. /tmp/dirb    //这个好像对以.开头的文件是能够复制过来的  这个有大用
    \cp -a /tmp/dira/. /tmp/dirb    //这个好像对以.开头的文件是能够复制过来的  这个有大用 有大大用 不会产生要覆盖的提示 即强制覆盖

    \cp -a /home/wwwroot/aaaa_com/public_html/vendor/  ./  这是复制public_html 目录 到 当前目录下面 不会产生要覆盖的提示有大用

cp -rf /home/wwwroot/sinozzz/* /home/wwwroot/sinozzz123  //这个好像对以.开头的文件是不能够复制过来的
cp -rf /home/wwwroot/sinozzz/*.*  /home/wwwroot/sinozzz123  //这个好像对以.开头的文件是不可以复制过来的(好像不能复制文件夹)
cp -rf /home/wwwroot/sinozzz/.*  /home/wwwroot/sinozzz12  //这个好像对以.开头的文件是能够复制过来的   # .* 既包括本目录的所有,又包括上一级目录的所有


cp -a default others   或者 cp -a default/ others  
这是复制目录 default  为另一个目录others


 

Linux下如何拷贝隐藏文件


首先 * 是不能够匹配到隐藏文件的,所以如果想拷贝隐藏文件是 * 是不行的

接下来说一下具体的方法

 [root@web1 ~]#   mkdir hh  

  [root@web1 ~]# mkdir jj   &  touch  jj/{.1,2}.txt          //创建两个文件含一个隐藏文件

 

接下来拷贝

 [root@web1 ~]# cd jj/

 [root@web1 ~]# cp  -r  .   /root/hh/       方法一

 [root@web1 ~]# cp  -a   .   /root/hh/      方法二

注:如果是想连同目录一起拷贝就不用cd

 

方法三:

 [root@web1 ~]# rsync  -avz   jj/    hh/            //同步的方式也是可以包含隐藏文件的    


cp $(ls -a) ../test1   也是复制全部文件

 (或者  cp `ls -a ` ../test1)也是复制全部文件


来自  https://blog.csdn.net/majiangnb/article/details/82118512


linux系统如何拷贝目录下的所有文件(包含隐藏文件)

示例:假设要把/home/usera下面的所有文件包括隐藏文件 拷贝到/mnt/temp目录下

操作:cp -R /home/usera/.  /mnt/temp/说明:注意使用“.”符号,它代表的是当前目录。不要使用通配符*。



为了让复制和移动大量文件去覆盖目标时,不会产生一个个的提示,命令应该这样写
\cp -rf /tu/* ../upload/images
注意 cp 命令前加了 \ ,意思是不让它用~/.bashrc里的别名运行,即 -i 参数
\cp -rf /tu  ../upload/images  就是把文件夹 tu 复制到 images 下面
 

Linux cp时总询问是否覆盖,怎样让它不询问直接覆盖?

Linux cp时总询问是否覆盖,怎样让它不询问直接覆盖?有两个方法可以解决此问题:
1、.bashrc里面注释掉 Alias cp='cp -i'

2、使用 \cp 命令(在cp前加一个'\')

 


 

 

-r递归持续复制,用于目录的复制行为
cp -r /etc/ /tmp 

-r递归持续复制,用于目录的复制行为
cp -r /etc/ /tmp

//f表示强制复制 进行覆盖
//下面表示强制复制目录下的所有东西
cp -rf /usr/local/php/lib/php/ /home/ftp/1520/8150-20121116-Ugz/81506779.com/php/pear/
 

如果 mv images-bak/* images 出现 目录非空的错 (移动到的目录即image里
有 与 images-bak内含的子目录同名的子目录)
我就用 \cp -rf images-bak/* images
      然后 rm -Rf images-bak/

 

cp -a default others 或者 cp -a default/ others 
这是复制目录 default  为另一个目录others

 

命令cp -a 和 cp -p 有什么区别?

貌似都是复制文件原来的所有权限啊
 我来答
举报浏览 44036 次
最佳答案
浪者无情 
2018-09-05
cp copy复制命令
-a 类似与Windows系统的复制快捷方式
-p 就是纯复制 连同属性一起复制了
但是这两种是连最后创建修改时间 一起复制来了 和Windows不太一样
这就是区别
匿名用户 
推荐于2018-02-19
cp (复制档案或目录)
[root@linux ~]# cp [-adfilprsu] 来源档(source) 目的档(destination)
[root@linux ~]# cp [options] source1 source2 source3 …. directory
参数:
-a :相当于 -pdr 的意思;
-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的档(destination)已经存在时,在覆盖时会先询问是否真的动作!
-l :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;
-p :连同档案的属性一起复制过去,而非使用预设属性;
-r :递归持续复制,用于目录的复制行为;
-s :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;
-u :若 destination 比 source 旧才更新 destination !

参数pdr分别为:保留权限,复制软链接本身,递归复制
 本回答被提问者和网友采纳
 36   8
 1评论  举报收起
故事还长ms 
2016-01-02
cp命令中参数不同意义也不同。
cp (复制档案或目录)

参数:
-a :相当于 -pdr 的意思(参数pdr分别为:保留权限,复制软链接本身,递归复制
);
-p :连同档案的属性一起复制过去,而非使用预设属性;

其他参数意义:
-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的档(destination)已经存在时,在覆盖时会先询问是否真的动作!
-l :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;
-r :递归持续复制,用于目录的复制行为;
-s :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;
-u :若 destination 比 source 旧才更新 destination。

来自 https://zhidao.baidu.com/question/547747089.html


linux下复制目录中所有文件及子目录(包括隐藏文件)

把dira目录中的所有文件(包括隐藏文件)复制到dirb中

正解:cp -a /tmp/dira/. /tmp/dirb

man 一下 cp

-a ,--archive

same as -dpR

=================================

误区一:

cp -rf /tmp/dira/.* /tmp/dirb

.* 包括了所有的文件和目录,但是也把 . 和.. 这两个包括在内,所以会递归复制,父目录的所有文件。

=================================

误区二:

cp -rf `ls -A /tmp/dira | grep '^.[^.]*'` /tmp/dirb

也会出现隐藏文件的一些错误。

来自  http://blog.csdn.net/wzwind/article/details/8587764

[root@linux ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination)
[root@linux ~]# cp [options] source1 source2 source3 .... directory
参数:
-a : 相当于 -pdr 的意思。
-d : 若来源文件为连接文件的属性(link file),则复制连接文件属性而非文件本身。
-f : 强制(force)的意思,若有重复或其他疑问时,不会询问用户,而强制复制。
-i : 若目标文件(destination)已经存在,在覆盖时会先询问是否真的操作。
-l : 建立硬连接(hard link)的连接文件,而非复制文件本身。
-p : 连同文件的属性一起复制,而非使用默认属性。
-r : 递归持续复制,用于目录的复制行为。
-s : 复制成为符号连接文件(symbolic link),即“快捷方式”文件。
-u : 若目标文件比来源文件旧,才更新目标文件。
最后,需要注意,如果来源文件有两个以上,则最后一个目的文件一定是“目录”。
范例:
范例一:将家目录下的 .bashrc复制到 /tmp下,并重命名为bashrc。
[root@linux ~]# cd /tmp
[root@linux tmp]# cp ~/.bashrc bashrc
[root@linux tmp]# cp -i ~/.bashrc bashrc
cp: overwrite `basrhc'? n
# 重复做两次动作,由于 /tmp下面已经存在bashrc了,加上 -i参数,
# 在覆盖前会让用户确认。可以按下n或者y。
# 但是,反过来说,如果不想询问,则加上 -f参数来强制直接覆盖。

范例二:将 /var/log/wtmp复制到 /tmp下。
[root@linux tmp]# cp /var/log/wtmp . <==想要复制到当前目录,最后的 . 不要忘
[root@linux tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--  1 root utmp 71808 Jul 18 12:46 /var/log/wtmp
-rw-r--r--  1 root root 71808 Jul 18 21:58 wtmp
# 注意到了吗?在不加任何参数的情况下,文件的拥有者会改变,连权限也跟着改变了。
# 这是个很重要的特性。要注意。还有,文件建立时间也不一样了。
# 如果想要将文件的所有属性都一起复制,可以加上 -a。
[root@linux tmp]# cp -a /var/log/wtmp wtmp_2
[root@linux tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r--  1 root utmp 71808 Jul 18 12:46 /var/log/wtmp
-rw-rw-r--  1 root utmp 71808 Jul 18 12:46 wtmp_2
# 整个属性完全一模一样。这就是 -a的作用。

范例三:将 /etc/ 目录下的所有内容复制到 /tmp。
[root@linux tmp]# cp /etc/ /tmp
cp: omitting directory `/etc'   <== 如果是目录,不能直接复制,要加上 -r参数
[root@linux tmp]# cp -r /etc/ /tmp
# 再次强调。-r可以复制目录,但是,文件与目录的权限会被改变。
# 所以,也可以利用cp -a /etc /tmp来执行命令。

范例四:将范例一复制的bashrc建立一个符号连接文件(symbolic link)
[root@linux tmp]# ls -l bashrc
-rw-r--r--  1 root root 395 Jul 18 22:08 bashrc
[root@linux tmp]# cp -s bashrc bashrc_slink
[root@linux tmp]# cp -l bashrc bashrc_hlink
[root@linux tmp]# ls -l bashrc*
-rw-r--r--  2 root root 395 Jul 18 22:08 bashrc
-rw-r--r--  2 root root 395 Jul 18 22:08 bashrc_hlink
lrwxrwxrwx  1 root root   6 Jul 18 22:31 bashrc_slink -> bashrc
# bashrc_slink是由 -s的参数造成的,建立的是一个“快捷方式”,
# 所以会看到在文件的最右边,会显示这个文件是“连接”到哪里的。
# 至于bashrc_hlink。建立了这个文件之后,bashrc与bashrc_hlink
# 所有的参数都一样,只是,第二列的link数改变成为2了。而不是原本的1。
# 这两种连接方式的异同,我们会在下一章介绍。

范例五:若 ~/.bashrc比 /tmp/bashrc新,则复制。
[root@linux tmp]# cp -u ~/.bashrc /tmp/bashrc
# -u的作用是,在目标文件与来源文件有差异时,才会复制。
# 所以,比较常用于“备份”。

范例6:将范例四生成的bashrc_slink复制成为bashrc_slink_2。
[root@linux tmp]# cp bashrc_slink bashrc_slink_2
[root@linux tmp]# ls -l bashrc_slink*
lrwxrwxrwx  1 root root   6 Jul 18 22:31 bashrc_slink -> bashrc
-rw-r--r--  1 root root 395 Jul 18 22:48 bashrc_slink_2
# 这个例子也很有趣。原本复制的是连接文件,却将连接文件的实际文件复制过来了。
# 也就是说,如果没有加上任何参数,复制的是来源文件,而非连接文件的属性。
# 若要复制连接文件的属性,就要使用 -d或者 -a参数。

范例7:将家目录的 .bashrc及 .bash_history复制到 /tmp下面。
[root@linux tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 将多个数据一次复制到同一个目录。

 

Linux cp命令拷贝命令非常实用,cp命令可以将指定路径下的文件(目录)拷贝到(成)另一文件或目录中,相当于DOS下COPY和XCOPY命令。cp命令语法如下:

cp [options] <source file or directory> <target file or directory>

cp [options] source1 source2 source3 …. directory

上面第一条命令为单个文件或目录拷贝,下一个为多个文件拷贝到最后的目录。

options选项包括:

  • - a 保留链接和文件属性,递归拷贝目录,相当于下面的d、p、r三个选项组合。

  • - d 拷贝时保留链接。

  • - f 删除已经存在目标文件而不提示。

  • - i 覆盖目标文件前将给出确认提示,属交互式拷贝。

  • - p 复制源文件内容后,还将把其修改时间和访问权限也复制到新文件中。

  • - r 若源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。当然,目标文件必须为一个目录名。

  • - l 不作拷贝,只是链接文件。

  • -s 复制成符号连结文件 (symbolic link),亦即『快捷方式』档案;

  • -u 若 destination 比 source 旧才更新 destination。

cp命令使用范例:

1、将文档 file1复制成file2,复制后名称被改file2

cp -i file1 file2

或,

cp file1 file2

2、将文档 file1复制到dir1目录下,复制后名称仍未file1

cp -i file1 dir1

或,

cp file1 dir1

3、将目录dir1复制到dir2目录下,复制结果目录被改名为dir2

cp -r dir1 dir2

4、将目录dir1下所有文件包括文件夹,都复制到dir2目录下

cp -r dir1/*.* dir2

常见错误:

1、提示cp: omitting directory错误

复制目录时,使用-r选项即可递归拷贝,如下:

cp -r dir1 dir2

参考文章:

http://www.ategpu.com/2009/08/14/linux-cp%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3.html

更多文章:
来自 http://www.metsky.com/archives/542.html


 

linux下文件夹的创建、复制、剪切、重命名、清空和删除命令

分类: linux c 5636人阅读 评论(0) 收藏 举报

在home目录下有wwwroot目录,wwwroot下有sinozzz目录,即/home/wwwroot/sinozzz

一、目录创建

在/home/wwwroot目录下新建一个sinozzz123的文件夹

mkdir /home/wwwroot/sinozzz123

二、目录复制

1.把/home/wwwroot/sinozzz里面的文件和文件夹等复制到home/wwwroot/sinozzz123目录下

cp -rf /home/wwwroot/sinozzz/* /home/wwwroot/sinozzz123

2.把/home/wwwroot/sinozzz123/abc/下的文件夹和文件复制到home/wwwroot/sinozzz123目录下

cp -rf /home/wwwroot/sinozzz123/abc/* /home/wwwroot/sinozzz123

3.把/home/wwwroot/sinozzz目录复制到/home/wwwroot/sinozzz123目录下,即把sinozzz复制变成sinozzz123的子目录,变成/home/wwwroot/sinozzz123/sinozzz的路径

cp -rf /home/wwwroot/sinozzz /home/wwwroot/sinozzz123

三、目录剪切

1.使用mv命令剪切文件。

如需要将/home/wwwroot/sinozzz123/music/目录下的1.mp3文件剪切到/home/wwwroot/sinozzz123/abc目录下,执行下面的命令即可:

# mv /home/wwwroot/sinozzz123/music/1.mp3 /home/wwwroot/sinozzz123/abc

2.使用mv命令剪切文件夹。

把/home/wwwroot/sinozzz123/soft文件夹剪切到/home/wwwroot/sinozzz123/abc目录下

# mv /home/wwwroot/sinozzz123/soft /home/wwwroot/sinozzz123/abc

3.使用mv命令剪切文件夹和文件

把/home/wwwroot/sinozzz123/photo/下的文件夹和文件剪切到/home/wwwroot/sinozzz123/abc目录下

# mv /home/wwwroot/sinozzz123/photo/* /home/wwwroot/sinozzz123/abc

四、目录重命名

在linux下,移动文件跟重命名都是同一个命令,mv(就是move的意思)

命令: mv 源文件名 目标文件名

1.把/home/wwwroot/sinozzz123/index.htm重命名为/home/wwwroot/sinozzz123/index.html

# mv /home/wwwroot/sinozzz123/index.htm /home/wwwroot/sinozzz123/index.html

2.把/home/wwwroot/sinozzz123目录重命名为/home/wwwroot/sinozzz456

# mv /home/wwwroot/sinozzz123 /home/wwwroot/sinozzz456

五、目录删除

linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可。

直接rm就可以了,不过要加两个参数-rf

即:rm -rf   目录名字

-r 就是向下递归,不管有多少级目录,一并删除

-f 就是直接强行删除,不作任何提示的意思

1.删除文件使用实例:

rm -f /home/wwwroot/sinozzz456/index.html

将会强制删除/home/wwwroot/sinozzz456/index.html这个文件

2.清空文件夹实例:

rm -rf /home/wwwroot/sinozzz456/abc/*

将会强制删除/home/wwwroot/sinozzz456/abc目录下所有文件、文件夹,保留/home/wwwroot/sinozzz456/abc目录

3.删除文件夹实例:

rm -rf /home/wwwroot/sinozzz456

将会强制删除/home/wwwroot/sinozzz456目录以及其下所有文件、文件夹

需要提醒的是:使用这个rm -rf的时候一定要格外小心,linux没有回收站的

当然,rm还有更多的其他参数和用法,man rm就可以查看了

如果是在/home/wwwroot/目录下进行操作,则可以省去每个命令的/home/wwwroot/部分
来自 http://blog.csdn.net/numbibi/article/details/8026841

 

 Linux cp 实现强行覆盖 2011-06-03 17:17:03

分类: LINUX

 

发现在Fedora 10 /ubutun 里面用cp -fr src dest,即使加了-f也是不能强行覆盖的,这时怎么回事的呢?一两个文件还好说,就输几个yes吧,但是要是n多文件怎么办,那还不输死人呢?下面提供三种解决办法。

方法一

我们输入alias命令,看看系统给cp起了一个什么别名。

[root@localhost ~]# alias
alias cp=’cp -i’
alias l.=’ls -d .* –color=auto’
alias ll=’ls -l –color=auto’
alias ls=’ls –color=auto’
alias mv=’mv -i’
alias rm=’rm -i’
alias which=’alias | /usr/bin/which –tty-only –read-alias –show-dot –show-tilde’

然后[root@localhost ~]# man cp
看看-i什么意思
-i, –interactive   prompt before overwrite
原来在覆盖之前会提示,那我们的解决办法也出来了,用unalias cp来解除cp的别名,还原纯净的cp。
[root@localhost ~]#unaslias cp   (这只是临时取消cp的别名,不是永久的)
[root@localhost ~]#cp -fr src dest       这下就行了,就不会提示覆盖了。

方法二

输入\cp命令,作用也是取消cp的别名。
[root@localhost ~]#\cp -fr src dest

方法三

输入yes|cp -fr src dest,使用管道自动输入yes。
[root@localhost ~]#yes | cp cp -fr src dest   让管道自动输入一大堆得yes,就可以完成了强行复制了。
那有人会问dos的copy命令怎么实现强行复制的呢?答案是
用来 xcopy /y src dest 来实现强行复制。

来自 http://blog.chinaunix.net/uid-223060-id-2215407.html

熟悉了 复制命令(http://www.linuxidc.com/Linux/2014-03/98210.htm),下一个相关的命令就是 mv 命令。当你想要将文件从一个位置移动到另一个地方并且不想复制它,那么mv 命令是完成这个任务的首选。

初识 mv 命令

mv 命令是一个与cp类似的命令,但是它并非创建文件或目录的复制品/副本。不管你在使用什么版本的Linux系统,mv 都默认安装在你的Linux系统上了。来看一下 mv 命令在日常操作中的一些例子。

1.移动文件

移动文件时需要注意的是文件的源地址和目标地址必须不同。这里有个例子,想要将file_1.txt文件从当前目录移动到其它目录,以/home/pungki/为例,语法应该如下:

  1. $ mv file_1.txt /home/pungki/office

mv command

如我们所见,当我们移动 filetxt 文件时,先前目录的 file1.txt 就被删除了

2.移动多个文件

如果想一次移动多个文件,我们可以将他们放在一行并用空格分开。

  1. $ mv file_2.txt file_3.txt file_4.txt /home/pungki/office

Move multiple files

如果你的文件有规律可循的话那么你就可以使用通配符。比如,为了移除所有以.txt为扩展名的文件,我们可以用下面的命令:

  1. $ mv *.txt /home/pungki/office

Move using pattern

3.移动目录

不同于复制命令,用 mv 命令移动目录相当直接。移动目录你可以使用不带选项的 mv 命令。看下面的截图就一目了然了。

Moving directory

4.重命名文件或目录

我们也用 mv 命令来重命名文件或目录。不过目标位置和源位置必须相同才可以。然后文件名必须不同。

假定我们当前所在目录为/home/pungki/Documents,而我们想将file1.txt重命名为file2.txt。那么命令应该如下:

  1. $ mv file_1.txt file_2.txt

如果是绝对路径,它应该像下面这样:

  1. $ mv /home/pungki/Documents/file_1.txt /home/pungki/Documents/file_2.txt

Renaming file

5. 重命名目录

上一段的规则同样适用于目录。请看这个例子:

  1. $ mv directory_1/ directory_2/

Renaming directory

来自http://www.linuxidc.com/Linux/2014-03/98211.htm

 

每天一个linux命令(8):cp 命令

 

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

1.命令格式:

用法:

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

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

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

2.命令功能:

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

3.命令参数:

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

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 的参数造成的,建立的是一个『快捷方式』,所以您会看到在文件的最右边,会显示这个文件是『连结』到哪里去的!

来自 http://www.cnblogs.com/peida/archive/2012/10/29/2744185.html


LinuxCentOS中cp复制、mv移动强制覆盖拷贝的命令

Linux下默认cp和mv命令无法在复制时强制覆盖,即使你用-f参数也无法强制覆盖文件,是因为它们在系统中是有别名的

Linux下默认cp和mv命令无法在复制时强制覆盖,即使你用 -f 参数也无法强制覆盖文件,是因为它们在系统中是有别名的(alias cp='cp -i'),而这个-i参数就是若目的檔(destination)已经存在时,在覆盖时会先询问是否真的动作!

下面提供几个从网上找的Linux下cp命令覆盖的方法。

1) 取消cp的alias(放心这不是永久生效):

#unalias cp

#cp a /test/a


2) 加反斜杠 \cp 执行cp命令时不走alias:

#\cp a /test/a


3)echo yes:

#yes|cp a /test/a


4) 我们可以使用绝对路径

#/bin/cp a /test/a

来自 https://www.qumai8.cn/2017/05/31/936.html


普通分类: