Diretório contendo estes arquivos:
irrelevant irrelevant.doc dok1.txt dok2.text dok3.txt dok4.text
Preciso encontrar todos os arquivos *txt e *text e fazer algumas transformações neles.
find
comando e resultado:
$ find -name '*txt' -or -name '*text'
./dok2.text
./dok4.text
./dok3.txt
./dok1.txt
Idealmente, esse é o resultado de que preciso, para passar esses quatro arquivos para -exec
.
Infelizmente find
com -print
(ou -exec echo {} +
) produz:
$ find -name '*txt' -or -name '*text' -print
./dok2.text
./dok4.text
Aparentemente, é este caso de find (da página man find):
NON-BUGS
Operator precedence surprises
The command find . -name afile -o -name bfile -print will never print afile
because this is actually equivalent to find . -name afile -o \( -name bfile
-a -print \). Remember that the precedence of -a is higher than that of -o
and when there is no operator specified between tests, -a is assumed.
Como o comando find deve ser fornecido para ter todos os quatro arquivos disponíveis para -exec?
Você precisa agrupar as expressões or-ed para que elas, como um grupo, tenham a mesma precedência que as expressões and-ed a seguir: