Saya ingin menghapus daftar file dan dimintai konfirmasi. Daftarnya ada dalam list.txt
file. Mengapa perintah berikut ini tidak berfungsi dengan baik?
while read i; do rm -i $i; done < list.txt
Perintah sebelumnya tidak menunggu saya tetapi untungnya tidak ada file yang dihapus.
Saya menggunakan Bash.
sumber
y
, file sebelumnya akan dihapus?y
, tetapi nama apa pun yang dimulai dengany
. Tampaknya, lihatrm
saja karakter pertama dari respons apa pun yang diterimanya: 'y' adalah ya, yang lain tidak.Untuk sesuatu yang sedikit lebih menarik daripada menjawab ya atau tidak untuk setiap file, Anda dapat menggunakan
iselect
pilihan berbasis ncurses interaktif. misalnyaatau untuk mengizinkan pemilihan file dalam direktori saat ini:
Itu akan menampilkan daftar ncurses berbasis layar penuh (terminal penuh), di mana file dapat dipilih dan tidak dipilih sesuka hati dengan menekan SPACE. tekan ENTER untuk menerima pilihan Anda (entri yang dipilih akan dicetak pada stdout), atau
q
untuk berhenti (tidak ada yang dicetak untuk stdout). tekanh
untuk bantuan.Perhatikan
echo rm
- saya sudah menulisnya seperti itu untuk pengujian. ubah menjadi hanyarm
sekali Anda yakin Anda mengerti apa yang dilakukannya.Perhatikan juga bahwa
xargs
sedang digunakan di sini dengan\n
sebagai pemisah input. Ini tidak akan berfungsi jika ada nama file yang memiliki karakter linefeed di dalamnya. Dalam hal ini,iselect
tidak akan berfungsi dengan baik - ia mengharapkan satu item per baris - sayangnya,iselect
tidak memiliki opsi untuk input atau output yang diakhiri null.iselect
Dikemas untuk debian, mungkin ubuntu dan distro lainnya juga. beranda ada di http://www.ossp.org/pkg/tool/iselect/sumber