@sch me levou a essa solução:
sed -bne '/\r$/ {p;q}' < /path/to/file | grep -q .
Isso sai com TRUE se o arquivo tiver qualquer linha que termine com CR. Para colocar isso em prática:
find /path/to/ -type f -exec sh -c 'sed -bne "/\r$/ {p;q}" < "$1" | grep -q .' sh {} \; -print
E eu acho que sei porque grep -l ^M hello.*
não funciona neste shell: parece que no Git Bash ^M
caracteres são removidos de todos os argumentos da linha de comando, então grep
nunca recebe o caractere e, portanto, todos os arquivos correspondem. Esse comportamento não é apenas na linha de comando, mas também em scripts de shell.
Portanto, a chave é expressar o caractere ^M
com outros símbolos, como \r
, em vez de literalmente.