如何在Git仓库中用sed处理文件时忽略二进制文件以避免报错?
解决Git仓库中sed跳过二进制文件的问题
方法1:借助git grep筛选文本文件
Git自带识别二进制文件的能力,用git grep加上--text参数就能只处理文本文件,自动跳过二进制文件。执行以下命令即可:
git grep --full-name --text -l '.' | xargs sed -i '' 's/here/there/g'
参数说明:
--text:强制Git只处理文本文件,忽略二进制文件-l:仅输出匹配到的文件名(这里用.匹配所有内容,所以会列出所有文本文件)
方法2:用file命令判断文件类型
如果你的系统有file命令,可以先判断文件是否为文本类型,再执行sed:
git ls-files | while read file; do if file "$file" | grep -q text; then sed -i '' 's/here/there/g' "$file" fi done
原理是file命令会识别文件的类型,通过grep -q text判断是否为文本文件,符合条件才执行sed修改。
方法3:临时调整字符编码(应急用)
如果只是因为二进制文件的非法字节序列导致报错,可以临时设置LC_ALL=C让sed忽略编码问题,但这个方法只是绕过错误,不会跳过二进制文件,可能误改内容,不推荐常用:
LC_ALL=C git ls-files | xargs sed -i '' 's/here/there/g'
内容的提问来源于stack exchange,提问作者user3310334
相关产品推荐
相关产品推荐

