Você não precisa usar sed
para remover o .DAT
se estiver usando bash
: a expansão do parâmetro integrado ${F%.DAT}
é a mesma sem usar um subshell e um programa externo.
Se os diretórios estivessem em locais arbitrários relativos aos arquivos .DAT
, então um arquivo de lista de diretórios é a maneira mais eficiente de resolvê-lo, mas considerando que ambos estão no mesmo local, uma resposta muito mais direta é:
find *.DAT | while read -r f; do if [ -d "${f%.DAT}" ]; then echo "${f%.DAT}" found; else rm "$f"; fi; done
Observe que isso manipulará nomes de arquivos com espaços incorporados, o que sua solução não faz.
Para outros shells, uma técnica similar pode ser usada, mas não posso falar por eles.