Nota
With bash
findI can look for the things (find . -name "thing*.txt")
Você já tentou isso? Isso também encontrará pensamentos. A seguinte chamada de find os exclui:
find . -name "thing*.txt" ! -name "*.thoughts.txt"
Resposta
Para encontrar coisas sem pensar, você pode usar -exec (ou -execdir ) como teste. Ele será bem-sucedido se o comando chamado retornar o status de saída de 0 . Nesse caso, o comando é test :
find . -name "thing*.txt" ! -name "*.thoughts.txt" -exec test ! -e "{}.thoughts.txt" \; -print
Como você pode ver, é muito fácil adicionar uma string ao nome ( "{}.thoughts.txt" ). Para encontrar pensamentos sem coisas, você basicamente faz o mesmo, mas precisa remover alguma corda; não é tão fácil. Um shell extra pode fazer isso:
find . -name "thing*.txt.thoughts.txt" -exec sh -c 'test ! -e "${1%.thoughts.txt}"' sh {} \; -print
${1%.thoughts.txt} retorna $1 com .thoughts.txt removido do final. Verificamos se esse arquivo não existe.
Observação find … -exec test … executa o executável test , enquanto sh -c 'test …' usa test incorporado em sh . Estes não são os mesmos, não importa neste caso.