Nota
With bash
find
I 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.