1. Por que seu exemplo não funcionou como esperado
Os prompts do rm precisam do STDIN para receber seus comentários. No seu exemplo, você usou STDIN para canalizar uma lista para o loop while , portanto, rm estava obtendo as respostas para seus prompts dos comandos ls / head / awk , em vez do usuário. / p>
A solução é não usar STDIN para fornecer a lista ao loop - por exemplo:
for y in $(ls -ltrd * | head -n -3 | awk '{print $NF}'); do
rm -iR $y
done
2. Maneira mais segura de fazer isso
Esteja pronto para nomes de arquivos contendo espaços (você não precisa de awk , para obter o nome do arquivo, basta informar ls para imprimir apenas o nome do arquivo no 1º lugar):
IFS=
for y in $(ls -1qtrd * | head -n -3); do
rm -iR "$y"
done
3. Uma maneira mais fácil de fazer isso
Como Archemar apontou: você nem precisa de um loop (contanto que não haja espaços nos nomes dos arquivos).
rm -iR $(ls -1qtrd * | head -n -3)