Por padrão, no Mac OS, você obterá BSD grep , enquanto o comando que você publicou provavelmente será para GNU grep . As duas versões das ferramentas são semelhantes, mas não idênticas. Isso também é verdade para outras ferramentas (por exemplo, as versões GNU e BSD de date se comportam de maneira um pouco diferente).
O problema é o - após o comando grep. O GNU grep interpreta isso como stdin (assim, aquelas linhas que foram identificadas como duplicatas por uniq -d ), enquanto o BSD grep está realmente procurando por um tempo chamado - ; daí a mensagem de erro:
>> find . \! -type d -exec cksum {} \; | sort | tee /tmp/f.tmp | cut -f 1,2 -d ' ' | uniq -d | grep -hif - /tmp/f.tmp
grep: -: No such file or directory
O mesmo acontece se você substituir o - por outro nome que não corresponda a nenhum arquivo:
>> find . \! -type d -exec cksum {} \; | sort | tee /tmp/f.tmp | cut -f 1,2 -d ' ' | uniq -d | grep -hif unknown-file /tmp/f.tmp
grep: unknown-file: No such file or directory
Você pode substituir o processo do bash para alimentar a stdout de tudo até o uniq to grep como um arquivo, por exemplo (Eu deixei cair o critério de tamanho neste exemplo, mas o resto é o mesmo):
>> grep -hif <(find . \! -type d -exec cksum {} \; | sort | tee /tmp/f.tmp | cut -f 1,2 -d ' ' | uniq -d) /tmp/f.tmp
4192268874 275 ./foo/META-INF/leiningen/foo/foo/project.clj
4192268874 275 ./foo/project.clj