Я хотел бы удалить список файлов и запросить подтверждение. Список находится в list.txt
файле. Почему следующая команда не работает должным образом?
while read i; do rm -i $i; done < list.txt
Предыдущая команда не ждет меня, но, к счастью, ни один файл не удален.
Я использую Bash.
bash
shell
io-redirection
rm
Франческо Турко
источник
источник
y
, предыдущий файл был бы удален?y
, а любое имя, начинающееся сy
. По-видимому,rm
просто смотрит на первый символ полученного ответа: «у» - да, все остальное - нет.Для чего-то более изящного, чем ответ «да» или «нет» на каждый файл, вы можете использовать его
iselect
для интерактивного выбора на основе ncurses. напримерили разрешить выбор файлов в текущем каталоге:
При этом отобразится полноэкранный (полный терминал) список на основе ncurses, где файлы можно выбирать и отменять по желанию, нажав клавишу ПРОБЕЛ. нажмите ENTER, чтобы принять ваш выбор (выбранные записи будут напечатаны на стандартный вывод) или
q
выйти (ничего не выводится на стандартный вывод). нажмитеh
для помощи.Обратите внимание
echo rm
- я написал это так для тестирования. замените его, чтобыrm
убедиться, что вы понимаете, что он делает.Также обратите внимание,
xargs
что здесь используется\n
в качестве разделителя ввода. Это не будет работать, если любое из имен файлов содержит символы перевода строки. В этом отношении,iselect
он также не будет работать должным образом - он ожидает один элемент на строку - к сожалению,iselect
не имеет опции для ввода или вывода с нулевым символом в конце.iselect
упакован для Debian, возможно Ubuntu и других дистрибутивов. домашняя страница находится по адресу http://www.ossp.org/pkg/tool/iselect/источник