Me gustaría eliminar una lista de archivos y pedirme confirmación. La lista está en el list.txtarchivo. ¿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,rmsolo 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
iselectpara 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
qpara salir (nada impreso en stdout). Presionehpara obtener ayuda.Tenga en cuenta que lo
echo rmhe escrito así para probar. cámbielo a solormuna vez que esté seguro de comprender lo que está haciendo.También tenga en cuenta que
xargsse está utilizando aquí\ncomo separador de entrada. Esto no funcionará si alguno de los nombres de archivo tiene caracteres de salto de línea. Por lo demás,iselecttampoco funcionará correctamente (espera un elemento por línea). Desafortunadamente,iselectno tiene una opción para entrada o salida con terminación nula.iselectestá 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