我正在编写一个bash脚本,它找到所有ascii文本字符并仅在ascii文本文件中替换字符串,它不应该替换所有二进制文件和可执行文件中的字符串。
我试过这个:
find . -type f \! -executable \! \( -name "*.o" -name "*.class" \) -print -exec sed -i 's/\<hello\>/Hello/g' '{}' \;
我想可能会有越来越多的二进制文件,使用-name编写它们可能不正确......
如果有人可以帮助我,它不应该是我写的单行脚本。
答案 0 :(得分:0)
您可以使用file命令检查类型:
#!/bin/bash
while read filename; do
file "$filename" | grep -q "ASCII text" || continue
echo "Updating $filename"
sed -i 's/\<hello\>/Hello/g' "$filename"
done < <(find . -type f \! -executable)