Chciałbym usunąć listę plików i zostać poproszony o potwierdzenie. Lista znajduje się w list.txt
pliku. Dlaczego poniższe polecenie nie działa poprawnie?
while read i; do rm -i $i; done < list.txt
Poprzednie polecenie nie czeka na mnie, ale na szczęście żaden plik nie jest usuwany.
Używam Bash.
bash
shell
io-redirection
rm
Francesco Turco
źródło
źródło
y
, poprzedni plik zostałby usunięty?y
, ale każde imię zaczynające się ody
. Najwyraźniejrm
po prostu patrzy na pierwszy znak jakiejkolwiek odpowiedzi, jaką otrzymuje: „y” jest tak, wszystko inne nie.Aby uzyskać coś bardziej wymyślnego niż odpowiadanie na tak lub nie na każdy plik, można użyć
iselect
interaktywnego wyboru opartego na ncurses. na przykładlub aby umożliwić wybór plików w bieżącym katalogu:
Spowoduje to wyświetlenie pełnoekranowego (pełnego terminala) wykazu opartego na ncurses, gdzie pliki można wybierać i usuwać do woli, naciskając SPACJĘ. naciśnij ENTER, aby zaakceptować wybrane opcje (wybrane wpisy zostaną wydrukowane na standardowym wyjściu) lub
q
wyjść z menu (nic nie zostanie wydrukowane na standardowym wyjściu). naciśnijh
po pomoc.Uwaga
echo rm
- napisałem to tak do testów. zmień to na tylko wtedy,rm
gdy masz pewność, że rozumiesz, co robi.Zauważ też, że
xargs
jest tutaj używany\n
jako separator wejściowy. To nie zadziała, jeśli którakolwiek z nazw plików zawiera znaki końca linii. Z tego też powoduiselect
nie będzie działać poprawnie - oczekuje jednego elementu w wierszu - niestetyiselect
nie ma opcji wejścia lub wyjścia zakończonego zerem .iselect
jest spakowany dla Debiana, prawdopodobnie Ubuntu i innych dystrybucji. strona główna znajduje się pod adresem http://www.ossp.org/pkg/tool/iselect/źródło