在使用rsync备份目录时要养成加斜杠的习惯
常用的选项: (-a -v --delete
--exclude
),
rsync常用选项
-a 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD, -a选项后面可以跟一个 --no-OPTION
这个表示关闭-rlptgoD中的某一个例如 -a--no-l
等同于-rptgoD
-r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项
-v 打印一些信息出来,比如速率,文件数量等
-l 保留软链结
-L 向对待常规文件一样处理软链结,如果是SRC中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到DST
-p 保持文件权限
-o 保持文件属主信息
-g 保持文件属组信息
-D 保持设备文件信息
-t 保持文件时间信息
--delete
删除那些DST中SRC没有的文件
--exclude=PATTERN
指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)
--progress
在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等
-u 加上这个选项后将会把DST中比SRC还新的文件排除掉,不会覆盖
xargs应用
就是把管道符前面的输出作为xargs后面的命令的输入。它的好处在于可以把本来两步或者多步才能完成的任务简单一步就能完成。xargs常常和find命令一起使用,比如,查找当前目录创建时间大于10天的文件,然后再删除。
[root@localhost ~]# find . -mtime +10 |xargs rm
这种应用是最为常见的,xargs后面的rm 也可以加选项,当是目录时,就需要-r选项了。在阿铭看来xargs的这个功能不叫什么,它的另一个功能才叫神奇。现在我有一个这样的需求,查找当前目录下所有.txt的文件,然后把这些.txt的文件变成.txt_bak。正常情况下,我们不得不写脚本去实现,但是使用xargs就一步。
[root@localhost ~]# mkdir test [root@localhost ~]# cd test [root@localhost test]# touch 1.txt 2.txt 3.txt 4.txt 5.txt [root@localhost test]# ls 1.txt 2.txt 3.txt 4.txt 5.txt [root@localhost test]# ls *.txt |xargs -n1 -i{} mv {} {}_bak [root@localhost test]# ls 1.txt_bak 2.txt_bak 3.txt_bak 4.txt_bak 5.txt_bak
xargs -n1 �Ci{} 类似for循环,-n1意思是一个一个对象的去处理,-i{}把前面的对象使用{}取代,mv {} {}_bak 相当于 mv 1.txt 1.txt_bak。
2. exec应用
使用find命令时,经常使用一个选项就是这个-exec了,可以达到和xargs同样的效果。比如,查找当前目录创建时间大于10天的文件并删除:
[root@localhost ~]# find . -mtime +10 -exec rm -rf {} \;
这个命令中也是把{}作为前面find出来的文件的替代符,后面的 \
为 ;
的脱意符,不然shell会把分号作为该行命令的结尾。这个-exec有时候也挺实用的,它同样可以实现刚刚上面批量更改文件名的需求:
[root@localhost test]# ls 1.txt_bak 2.txt_bak 3.txt_bak 4.txt_bak 5.txt_bak [root@localhost test]# find ./*_bak -exec mv {} {}_bak \; [root@localhost test]# ls 1.txt_bak_bak 2.txt_bak_bak 3.txt_bak_bak 4.txt_bak_bak 5.txt_bak_bak