拷贝目录 并根据正则表达式排除指定目录/文件

# https://zohead.com/archives/linux-copy-directory-ignore-files/

# find 的 -regextype 参数指定正则表达式类型,posix-egrep 为 egrep 用的扩展正则表达式,-mindepth 使 find 的输出中不包括目录本身,-regex 参数指定过滤的文件的正则表达式,-regex 前面的感叹号表示跳过,'./(dev|tmp)($|/.*)' 这个正则表达式即表示跳过目录中的第一层 dev 和 tmp 目录以及下面所有的文件和文件夹,最后两个 -name 指定要跳过文件名为 Makefile 和 .svn 的文件,这样在备份版本库的时候非常有用。

# cpio 命令将 find 的输出文件列表依次拷贝到 ../old_cp目标目录中,-a 表示不更新文件的访问时间,-d 指定自动创建目录,-m 指定保留文件的修改时间,-p 指定 cpio 工作在 Copy-pass 模式,这是专门用来拷贝目录树的一种模式。

cd old

find . -regextype posix-egrep -mindepth 1 ! -regex '.*/(\.git|\.idea|\.gradle|build|node_modules)($|/.*)' ! -name Makefile -a ! -name .svn | cpio -admvp ../old_cp

你可能感兴趣的:(拷贝目录 并根据正则表达式排除指定目录/文件)