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