Uma solução sem canalizar em outro lugar seria passar o nome do diretório para um subshell na função find
exec
.
Isso não será tão eficiente e, claro, tentará remover diretórios que não existem se já tiverem sido excluídos.
find . -depth -type f -name 'things.txt' -exec sh -c 'rm -rf "$(dirname $0)"' {} \;
Se você quiser usar xargs
, pode fazê-lo de maneira muito simples. Note que dirname
leva apenas um argumento, então você tem que especificar -n 1
para ter xargs
apenas passar um:
find . -depth -type f -name 'things.txt' | xargs -n 1 dirname | uniq | xargs rm -rf
Isso não será seguro se o nome do seu diretório contiver uma nova linha, então esteja ciente disso.