Me gustaría eliminar una lista de archivos y pedirme confirmación. La lista está en el list.txt
archivo. ¿Por qué el siguiente comando no funciona correctamente?
while read i; do rm -i $i; done < list.txt
El comando anterior no me espera, pero afortunadamente no se elimina ningún archivo.
Estoy usando Bash
fuente
y
, ¿el archivo anterior se habría eliminado?y
, sino cualquier nombre que comience cony
. Aparentemente,rm
solo mira el primer carácter de cualquier respuesta que reciba: 'y' es sí, cualquier otra cosa es no.Para algo un poco más elegante que responder sí o no a cada archivo, puede usarlo
iselect
para una selección interactiva basada en ncurses. p.ejo para permitir la selección de archivos en el directorio actual:
Eso mostrará una lista basada en ncurses en pantalla completa (terminal completa), donde los archivos se pueden seleccionar y deseleccionar a voluntad presionando la barra espaciadora. presione ENTRAR para aceptar sus selecciones (las entradas seleccionadas se imprimirán en stdout) o
q
para salir (nada impreso en stdout). Presioneh
para obtener ayuda.Tenga en cuenta que lo
echo rm
he escrito así para probar. cámbielo a solorm
una vez que esté seguro de comprender lo que está haciendo.También tenga en cuenta que
xargs
se está utilizando aquí\n
como separador de entrada. Esto no funcionará si alguno de los nombres de archivo tiene caracteres de salto de línea. Por lo demás,iselect
tampoco funcionará correctamente (espera un elemento por línea). Desafortunadamente,iselect
no tiene una opción para entrada o salida con terminación nula.iselect
está empaquetado para debian, probablemente ubuntu y otras distribuciones también. La página de inicio está en http://www.ossp.org/pkg/tool/iselect/fuente