2023年7月26日发(作者:)
(转)linux下cp⽬录时排除⼀个或者多个⽬录的实现⽅法原⽂链接:说明:/home⽬录⾥⾯有data⽬录,data⽬录⾥⾯有a、b、c、d、e五个⽬录,现在要把data⽬录⾥⾯除过e⽬录之外的所有⽬录拷贝到/bak⽬录中⽅法⼀:终端命令⾏下执⾏以下命令cp -R `find /home/data -type d -path /home/data/e -prune -o -print | sed 1d ` /bak###上述命令说明###1. find /home/data -type d 找出该⽬录下的⽂件夹,如果是-type f则是找出该⽬录下的⽂件。2. 再加上路径选项:-path /home/data/e 表是找出/home/data指定路径下的⽂件夹。3. -prune:使得find命令不进⼊到当前路径。4. -o类似于逻辑或运算,find /home/data -type d -path /home/data/e -prune -o -print是find /home/data -type d -path /home/data/e -a -prune -o-print的缩写。其中-a相当于逻辑与&&,-o相当于逻辑或||,上述命令等价于:if -path "/home/data/e" then
-prune
else
意思就是查找/home/data⽬录下的⽂件夹,如果路径是/home/data/e,就执⾏“-prune”(跳过)操作,如果不是该路径,则执⾏ “-print”(打印)操作。参考链接1:参考链接2:5. sed 1d:通过管道执⾏该命令,表⽰上⾯查找出来的⽂件列表删除第⼀⾏(/home/data),即根⽬录不需要加进来,否则的话就相当于把所有⽂件夹进⾏了拷贝。#####################################################################脚本实现脚本存放路径/home/ /home/ #编辑脚本,添加下⾯的代码#!/bin/shcp -R `find /home/data -type d -path /home/data/e -prune -o -print | sed 1d ` /bakchmod +x /home/ #添加脚本执⾏权限cd /home #进⼊脚本存放⽬录./ #执⾏脚本########################################################⽅法⼆:使⽤cp命令复制的时候,只能排除⼀个⽬录不被复制,如果想排除两个或者多个⽬录的话,就需要使⽤rsync命令来实现了,看下⾯的例⼦如果要排除/home/data⽬录下⾯的a、b、c、三个⽬录,同时拷贝其它所有⽬录,执⾏以下命令yum install rsync #安装rsyncrsync -av --exclude data/a --exclude data/b --exclude data/c data /bak注意:--exclude后⾯的路径不能为绝对路径,必须为相对路径才可以,否则出错。注解:rsync命令是⼀个远程数据同步⼯具,可通过LAN/WAN快速同步多台主机间的⽂件。-a参数表⽰archive模式,-v表⽰详细链模式输出,-z表⽰传输⽂件时使⽤压缩传输的模式。参考链接:
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690361525a337851.html
评论列表(0条)