linux shell拷贝命令,Linux 命令 & shell 脚本之01(cp & scp命令)

Linux cp命令主要用于复制文件或目录

1.语法

cp [options] source dest

or

cp [options] source... directory

2.参数说明

-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。

-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。

-f:覆盖已经存在的目标文件而不给出提示。

-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。

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

-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。

-l:不复制文件,只是生成链接文件

3.案例

3.1. cp 命令基本用法

#把源文件不改名复制到 mytestdir/ 目录下

[root@MYSQL8 ~]# mkdir mytestdir

[root@MYSQL8 ~]# touch testcp.txt

[root@MYSQL8 ~]# pwd

/root

[root@MYSQL8 ~]# cp testcp.txt /root/mytestdir/

[root@MYSQL8 ~]# cd mytestdir/

[root@MYSQL8 mytestdir]# ls

testcp.txt

#改名复制,则命令如下

[root@MYSQL8 ~]# pwd

/root

[root@MYSQL8 ~]# ls test*

testcp.txt

[root@MYSQL8 ~]# cp testcp.txt /root/mytestdir/testcp_new.txt

[root@MYSQL8 ~]# ls /root/mytestdir/testcp_new*

/root/mytestdir/testcp_new.txt

#复制的目标位置已经存在同名的文件,则会提示是否覆盖,因为 cp 命令默认执行的是“cp -i”的别名

[root@MYSQL8 ~]# pwd

/root

[root@MYSQL8 ~]# ls testcp*

testcp.txt

[root@MYSQL8 ~]# cp testcp.txt /root/mytestdir/

cp: overwrite ‘/root/mytestdir/testcp.txt’? yes

3.2 复制目录

[root@MYSQL8 ~]# pwd

/root

[root@MYSQL8 ~]# mkdir /root/dir1 -p

[root@MYSQL8 ~]# mkdir /root/dir1/subdir1 -p

[root@MYSQL8 ~]# touch /root/dir1/testcp2.txt

[root@MYSQL8 ~]# ls -R /root/dir1/

/root/dir1/:

subdir1 testcp2.txt

/root/dir1/subdir1:

[root@MYSQL8 ~]# mkdir /root/dir2 -p

[root@MYSQL8 ~]# cp -r /root/dir1/ /root/dir2/

[root@MYSQL8 ~]# ls -R /root/dir2/

/root/dir2/:

dir1

/root/dir2/dir1:

subdir1 testcp2.txt

/root/dir2/dir1/subdir1:

3.3 复制软链接文件

[root@MYSQL8 ~]# mkdir /root/source -p

[root@MYSQL8 ~]# touch /root/source/source_file.txt

[root@MYSQL8 ~]# mkdir /root/source_slink -p

##建立一个测试软链接文件 source_file_slink.txt

[root@MYSQL8 ~]# ln -s /root/source/source_file.txt /root/source_slink/source_file_slink.txt

[root@MYSQL8 ~]# ll /root/source_slink/s*

lrwxrwxrwx 1 root root 28 Sep 12 00:38 /root/source_slink/source_file_slink.txt -> /root/source/source_file.txt

#复制软链接文件,但是不加"-d"选项(实际复制的是 软链接的源文件,而不是软链接文件)

[root@MYSQL8 ~]# cp /root/source_slink/source_file_slink.txt /root/mytestdir/source_file_new.txt

[root@MYSQL8 ~]# ll /root/mytestdir/source_file_new*

-rw-r--r-- 1 root root 0 Sep 12 00:44 /root/mytestdir/source_file_new.txt

#复制软链接文件,加"-d"选项,则会复制软链接文件

[root@MYSQL8 ~]# cp -d /root/source_slink/source_file_slink.txt /root/mytestdir/source_file_slink_new.txt

[root@MYSQL8 ~]# ll /root/mytestdir/source_file_slink_new*

lrwxrwxrwx 1 root root 28 Sep 12 00:47 /root/mytestdir/source_file_slink_new.txt -> /root/source/source_file.txt

3.4. 保留源文件属性复制

#在执行复制命令后,目标文件的时间会变成复制命令的执行时间,而不是源文件的时间。例如

#注意源文件的时间和所属组

[root@MYSQL8 ~]# ll testcp.txt

-rw-r--r-- 1 root root 0 Sep 12 00:07 testcp.txt

[root@MYSQL8 ~]# cp testcp.txt /root/dir2/testcp_new2.txt

[root@MYSQL8 ~]# cp testcp.txt /root/dir2/

[root@MYSQL8 ~]# ll /root/dir2/testcp*

-rw-r--r-- 1 root root 0 Sep 12 21:45 /root/dir2/testcp_new2.txt

-rw-r--r-- 1 root root 0 Sep 12 21:46 /root/dir2/testcp.txt

#由于复制命令由root用户执行,所以目标文件的所属组为了root,而且时间也变成了复制命令的执行时间

#而当我们执行备份、曰志备份的时候,这些文件的时间可能是一个重要的参数,这就需执行 "-p" 选项了。

#这个选项会保留源文件的属性,包括所有者、所属组和时间。例如:

[root@MYSQL8 ~]# cp -p testcp.txt /root/dir2/testcp_new3.txt

[root@MYSQL8 ~]# ll /root/dir2/testcp_new3.txt

-rw-r--r-- 1 root root 0 Sep 12 00:07 /root/dir2/testcp_new3.txt

#源文件和目标文件的所有属性都一致,包括时间

#之前讲过,"-a" 选项相当于 "-d、-p、-r" 选项,这几个选项我们已经分别讲过了。

#所以,当我们使用 "-a" 选项时,目标文件和源文件的所有属性都一致,包括源文件的所有者,所属组、时间和软链接性。

#使用 "-a" 选项来取代 "-d、-p、-r" 选项更加方便。

3.5. "-l" 和 "-s" 选项

#如果使用 "-l" 选项,则目标文件会被建立为源文件的硬链接;而如果使用了 "-s" 选项,则目标文件会被建立为源文件的软链接。

#这两个选项和 "-d" 选项是不同的,"d" 选项要求源文件必须是软链接,目标文件才会复制为软链接;

#而 "-l" 和 "-s" 选项的源文件只需是普通文件,目标文件就可以直接复制为硬链接和软链接。例如:

[root@MYSQL8 ~]# mkdir /root/source_hlink -p

[root@MYSQL8 ~]# cd /root/source

[root@MYSQL8 source]# ll -i source_file.txt

51646850 -rw-r--r-- 1 root root 0 Sep 12 00:36 source_file.txt

[root@MYSQL8 source]# cp -s /root/source/source_file.txt /root/source_slink/source_file_slink2.txt

[root@MYSQL8 source]# cp -l /root/source/source_file.txt /root/source_hlink/source_file_hlink2.txt

[root@MYSQL8 source]# ll -i /root/source_slink/source_file_slink2.txt /root/source_hlink/source_file_hlink2.txt

51646850 -rw-r--r-- 2 root root 0 Sep 12 00:36 /root/source_hlink/source_file_hlink2.txt

594268 lrwxrwxrwx 1 root root 28 Sep 12 21:59 /root/source_slink/source_file_slink2.txt -> /root/source/source_file.txt

4.cat

[root@MYSQL8 ~]# cat testdata.txt

data1 100

data2 200

data3 300

data4 400

# -n参数会给所有的行加上行号

[root@MYSQL8 ~]# cat -n testdata.txt

1 data1 100

2

3 data2 200

4 data3 300

5

6 data4 400

#只想给有文本的行加上行号,可以用-b参数

[root@MYSQL8 ~]# cat -b testdata.txt

1 data1 100

2 data2 200

3 data3 300

4 data4 400

scp 複製目錄

#源端預覽要複製的目錄

[oracle@mppay1 testscpdir]$ ll /home/oracle/testscpdir/

-rw-r--r-- 1 oracle oinstall 0 Dec 30 23:26 1.txt

-rw-r--r-- 1 oracle oinstall 0 Dec 30 23:26 2.txt

drwxr-xr-x 2 oracle oinstall 19 Dec 30 23:27 subdir

[oracle@mppay1 testscpdir]$ ll /home/oracle/testscpdir/subdir/

-rw-r--r-- 1 oracle oinstall 0 Dec 30 23:27 3.txt

----------------------------------------------------------------------------------------------

# 開始複製目錄到遠端

[oracle@mppay1 testscpdir]$ scp -r /home/oracle/testscpdir oracle@10.0.102.177:/home/oracle/

1.txt 100% 0 0.0KB/s 00:00

2.txt 100% 0 0.0KB/s 00:00

3.txt 100% 0 0.0KB/s 00:00

#目標端驗證

[oracle@mppay2 ~]$ ll /home/oracle/testscpdir/

-rw-r--r-- 1 oracle oinstall 0 Dec 30 23:29 1.txt

-rw-r--r-- 1 oracle oinstall 0 Dec 30 23:29 2.txt

drwxr-xr-x 2 oracle oinstall 19 Dec 30 23:29 subdir

[oracle@mppay2 ~]$ ll /home/oracle/testscpdir/subdir/

-rw-r--r-- 1 oracle oinstall 0 Dec 30 23:29 3.txt

6.linux快速删除大量文件

[root@xag129 ~]# yum install rsync -y

假设要删除的目录/root/testscpdir 下面有大量的文件

a、首先创建一个空目录

[root@xag129 ~]# mkdir /root/empty

[root@xag129 ~]# ll /root/testscpdir

-rw-r--r--. 1 root root 0 Jan 1 22:37 1.txt

-rw-r--r--. 1 root root 0 Jan 1 22:38 2.txt

drwxr-xr-x. 2 root root 19 Jan 1 22:37 subdir

[root@xag129 ~]# rsync --delete-before -d /root/empty/ /root/testscpdir/

[root@xag129 ~]# ll /root/testscpdir

total 0

[root@xag129 ~]# rmdir /root/empty

自此完成清空 /root/testscpdir/ 工作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值