Linux拷贝排除一个或多个目录的实现方法
文章目录:
- 一、用cp命令实现
- 二、用rsync命令
你有没有想要拷贝某个目录下的很多文件或者目录,但是又偏偏有几个文件你不想要拷贝,有人说可以全部拷贝过去再删除呀,但是关键这几个文件可能很大很大,这个时间成本怎么算呀,好吧,那我们就来一个 “一致对外” 策略!!!
建议采用rsync命令,方便快捷
一、用cp命令实现
/home目录里面有data和photo目录,data目录里面有test1,test2,test3,test4四个目录,现在要把data目录里面除test4目录之外的所有目录拷贝到photo目录中
cp -r find /home/data -type d -path /home/data/test4 -prune -o -print | sed 1d
/home/photo
上述命令参数说明:
- find /home/data -type d 找出该目录下的文件夹,如果是-type f则是找出该目录下的文件。
- 再加上路径选项:-path /home/data/test4表是找出/home/data指定路径下的文件夹。
- -prune:使得find命令不进入到当前路径。
- -o类似于逻辑或运算,find /home/data -type d -path /home/data/test4 -prune -o -print是find /home/data -type d -path /home/data/test4 -a -prune -o -print的缩写。
其中-a相当于逻辑与&&,-o相当于逻辑或||,上述命令等价于:
if -path “/home/data/e” then
-prune
else
意思就是查找/home/data目录下的文件夹,如果路径是/home/data/e,就执行“-prune”(跳过)操作,如果不是该路径,则执行 “-print”(打印)操作。
- sed 1d:通过管道执行该命令,表示上面查找出来的文件列表删除第一行(/home/data),即根目录不需要加进来,否则的话就相当于把所有文件夹进行了拷贝。
二、用rsync命令
ync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync 本来是文件同步备份的工具,相对于普通的 cp 命令,rsync 在控制方面就强多了,而且 rsync 对遍历目录也支持,有
--exclude
参数可以忽略指定的文件或文件夹。
/home目录里面有data和photo目录,data目录里面有test1,test2,test3,test4四个目录,现在要把data目录里面除test3和test4目录之外的所有目录拷贝到photo目录中
cd /home/data
rsync -av --exclude test3/ --exlclude test4/ ../data/ /home/photo
上述命令参数说明:
-a参数表示archive模式(-a 参数已经包含遍历处理参数 -r),-v表示详细链模式输出,-z表示传输文件时使用压缩传输的模式。
注意:
–exclude后面的路径不能为绝对路径,必须为相对路径才可以,否则出错。