您的位置:首页 > 运维架构 > Linux

Linux基础之 CP命令

2017-05-16 20:18 363 查看
Linux内经常使用的cp命令,总结一下。需要特别注意的是,跨计算机传输的时候是使用scp命令,本机传输使用cp命令。(本机的scp命令会被默认转成cp命令)

cp

拷贝命令细节

1. cp命令详解

1.1 cp命令详解

copy命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大。

语法: cp [选项] 源文件或目录 目标文件或目录

说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。

该命令的各选项含义如下:

- a
该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。(文件内有软连接时需要特别注意,平常
-rp
足够使用了。)

- d
拷贝时保留链接。

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

- i
和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。

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

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

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

需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。

1.2. 具体例子

1.2.1. 例1 复制指定目录下的全部文件到另一个目录中

文件及目录的复制是经常要用到的。linux下进行复制的命令为cp。

假设复制源目录 为 dir1 ,目标目录为dir2。怎样才能将dir1下所有文件复制到dir2下了

如果dir2目录不存在,则可以直接使用
cp -r dir1 dir2
即可。

如果dir2目录已存在,则需要使用
cp -r dir1/. dir2
, 如果这时使用
cp -r dir1 dir2
,则也会将dir1目录复制到dir2中,明显不符合要求。

ps:dir1、dir2改成对应的目录路径即可。

1.2.2. 例2 复制指定文件到指定文件夹

首先建立一个用于测试的目录,用
tree
命令查看可见,目录中主要包含用于测试的.txt文件和用于充当炮灰的其它文件。拷贝文件的目标是保持当前的目录结构,只把txt文件复制出来。

方法一:当不需要的文件类型较为单一时,可以通过完全复制然后删除指定类型的文件完成.

Step1 使用命令 cp -r test/ test2 将测试目录test下所有内容完全复制到test2;

Step2 组合使用find及xargs,将*.tes文件删除;

xargs是给命令传递参数的一个过滤器,可以将前一个命令产生的输出作为后一个命令的参数。

命令find test2/ -name ‘*.tes’ |xargs rm -rf, 即将find产生的输出(test2目录下的所有tes文件), 作为rm的参数,从而完全删除.

适用场景举例:把项目文件备份,要去除其中的.svn文件,可以采用这种方式.

方法二:需要的文件为单一类型,带目录结构复制

这种情况下可以使用tar命令将指定类型的文件打包,然后解包,同样需要组合使用find和xargs

Step1 建立目录test3

mkdir test3


Step2 将指定类型文件带目录结构打包

find test/ -name '*.txt' |xargs tar czf test3.tgz


Step3 解包到目录test3

tar zxvf test3.tgz -C test3


适用场景:较为普遍,例如可以复制某个Web项目的所有html/jsp/php文件;或复制其他项目中特定类型的源文件

2. cp命令详解

2.1. 拷贝细节一

复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的。linux下进行复制的命令为cp。

假设复制源目录 为 dir1 ,目标目录为dir2。怎样才能将dir1下所有文件复制到dir2下?

如果dir2目录不存在,则可以直接使用
cp -r dir1 dir2
即可。

如果dir2目录已存在,则需要使用
cp -r dir1/. dir2
, 如果这时使用
cp -r dir1 dir2
,则也会将dir1目录复制到dir2中,明显不符合要求。

ps:dir1、dir2改成对应的目录路径即可。

注意:
cp -r /home/www/xxx/statics/. /home/www/statics


如果存在文件需要先删除
rm -rf /home/www/statics/*
否则会一个个文件提示你确认,使用cp -rf 也一样提示。

2.2. 拷贝细节二

linux下cp整个文件夹的文件到另一个文件夹
cp -ri A/B/* A1/B1/ 回车


若复制过程中询问是否覆盖,输入y按回车,若不想看到提示直接覆盖使用-rf;

另外若A A1不在同一目录下,最好填绝对路径,就是/xxx/xxx/A/B/* /xxx/A1/B1/

cp -ri /home/server/tomcat/* /home/server/test/

cp: target `/home/server/test/' is not a directory
#需要先创建目标文件夹
mkdir /home/server/test


参考内容

[1] linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹

[2] Linux 命令大全 (cp命令)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: