O que você tem é uma boa base para começar. Se você modificou o conteúdo do seu -exec
, você poderia introduzir uma construção if/then
que permitiria que você agisse no estado da contagem sendo 1 ou não.
$ find . -type f -iname "readme.txt" -exec \
sh -c 'if [ "$(ls $(dirname "{}") | wc -l)" -eq "1" ]; \
then echo "yes"; \
else echo "no"; \
fi' \;
no
yes
yes
no
Com isso, poderíamos expandir o comando echo "yes"
para executar a remoção real do arquivo. Algo como rm "{}"
deve fazer o truque.
Exemplo
$ find . -type f -iname "readme.txt" -exec \
sh -c 'if [ "$(ls $(dirname "{}") | wc -l)" -eq "1" ]; \
then echo "removing {}.."; rm "{}"; \
else echo "no"; \
fi' \;
no
removing ./usecase/destroy_this/readme.txt..
removing ./usecase/do_nothing/rm_this/README.TXT..
no
A execução da segunda vez confirma que os arquivos não estão mais lá:
$ find . -type f -iname "readme.txt" -exec \
sh -c 'if [ "$(ls $(dirname "{}") | wc -l)" -eq "1" ]; \
then echo "removing {}.."; rm "{}"; \
else echo "no"; \
fi' \;
no
no