如何使用Rsync仅同步node_modules目录外的所有index.js文件(不使用filelist.txt)
如何使用Rsync仅同步node_modules目录外的所有index.js文件(不使用filelist.txt)
看起来你当前的rsync命令会把node_modules目录里的index.js也同步进来,问题出在过滤规则的顺序上——rsync是按规则的先后顺序匹配的,一旦某条规则匹配成功,就会停止处理后续规则。咱们调整一下规则顺序就能完美解决这个问题:
rsync -rv --exclude='node_modules/' --include='*/' --include='index.js' --exclude='*' --prune-empty-dirs /www /testbackup -n
我来给你拆解下每个规则的作用:
--exclude='node_modules/':这条规则要放在最前面,直接排除所有node_modules目录及其下的所有内容,这样node_modules里的文件根本不会进入后续规则的匹配流程。--include='*/':包含所有目录,这一步很关键——rsync需要遍历目录才能找到深层子文件夹里的index.js,要是漏掉这条,只会同步根目录下的index.js。--include='index.js':明确指定要同步所有index.js文件,这时候因为已经提前排除了node_modules,所以只会匹配到node_modules之外的目标文件。--exclude='*':排除所有未被前面规则包含的文件和目录,确保只有我们需要的index.js被同步。--prune-empty-dirs:同步完成后自动清理目标目录里的空文件夹,避免因为大部分内容被排除而留下一堆空目录。-n:这是测试模式,只会输出将要同步的内容,不会实际修改目标目录,你可以先通过这个模式确认输出符合预期,再去掉-n执行真实同步。
你可以运行上面的测试命令看看,输出里应该就不会再出现node_modules下的index.js啦。
备注:内容来源于stack exchange,提问作者Sandri Dianan
相关产品推荐
相关产品推荐

