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)