linux排除多个文件,linux下cp目录时排除一个或者多个目录的方法

方法一:终端命令行下执行以下命令

cp -R `find /home/data -type d  -path /home/data/e  -prune -o -print | sed 1d ` /bak

find A ! -name 100 ! -name 101 -exec cp {} somedir/{} \;

使用cp命令复制的时候,只能排除一个目录不被复制,如果想排除两个或者多个目录的话,就需要使用rsync命令来实现了,看下面的例子

方法二:

如果要排除/home/data目录下面的a、b、c、三个目录,同时拷贝其它所有目录,执行以下命令

rsync -av --exclude data/a  --exclude data/b  --exclude data/c  data   /bak

注意:--exclude后面的路径不能为绝对路径,必须为相对路径才可以,否则出错。

使用 find 加 cpio 进行拷贝:

备注:此方法来自 Advanced Bash-Scripting Guide,需要了解的童鞋自己去参考了。

过 find 的童鞋都知道,find 对文件的过滤那是非常强大的,配合 cpio

来进行目录的遍历拷贝就可以实现过滤指定的文件或文件夹,当然也可以做到只备份特定的文件或文件夹,你可以用 find

的各种过滤参数达到拷贝哪天的文件,拷贝近期更改的文件等特殊效果,而且 find 支持正则表达式,这种方式想比第一种使用 rsync

跳过文件的方式更加灵活,因此非常推荐使用此方式进行目录拷贝。

cd dir1

find

. -regextype posix-egrep -mindepth 1 ! -regex ‘./(dev|tmp)($|/.*)’ !

-name Makefile -a ! -name .svn | cpio -admvp /home/dir2

小解释下:

find

的 -regextype 参数指定正则表达式类型,posix-egrep 为 egrep 用的扩展正则表达式,-mindepth 使 find

的输出中不包括目录本身,-regex 参数指定过滤的文件的正则表达式,-regex

前面的感叹号表示跳过,’./(dev|tmp)($|/.*)’ 这个正则表达式即表示跳过目录中的第一层 dev 和 tmp

目录以及下面所有的文件和文件夹,最后两个 -name 指定要跳过文件名为 Makefile 和 .svn

的文件,这样在备份版本库的时候非常有用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值