Якщо ви хочете видалити всі файли, імена яких відповідають певній формі, підкреслювальний знак (шаблон шаблону) є найбільш простим рішенням. Деякі приклади:
$ rm -f abc.log.* # Remove them all
$ rm -f abc.log.2012* # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]* # Remove all files from the first quarter of 2012
Регулярні вирази є більш потужними, ніж маклери; Ви можете подати вихід grepна rm -f. Наприклад, якщо деякі імена файлів починаються з "abc.log"деяких, а деякі з "ABC.log", grepдозволяють вам збігтися до невідповідності регістру:
$ rm -f $(ls | grep -i '^abc\.log\.')
Це спричинить проблеми, якщо будь-яке ім’я файлів містить смішні символи, включаючи пробіли. Будь обережний.
Коли я це роблю, ls | grep ...спершу запускаю команду і перевіряю, чи видає я потрібний результат, особливо якщо я використовую rm -f:
$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)
де !!розгортається до попередньої команди. Або я можу набрати стрілку вгору або Ctrl-P і відредагувати попередній рядок, щоб додати rm -fкоманду.
Це передбачає, що ви використовуєте оболонку bash. Деякі інші оболонки, зокрема csh та tcsh, а також деякі старі оболонки, отримані sh, можуть не підтримувати $(...)синтаксис. Ви можете використовувати еквівалентний синтаксис backtick:
$ rm -f `ls | grep -i '^abc\.log\.'`
$(...)Синтаксис легше читати, і якщо ви дійсно амбітні це може бути вкладеним.
Нарешті, якщо підмножина файлів, яку ви хочете видалити, не може бути легко виражена звичайним виразом, я часто використовую хитрість - перераховувати файли до тимчасового текстового файлу, а потім редагувати його:
$ ls > list
$ vi list # Use your favorite text editor
Потім я можу редагувати listфайл вручну, залишаючи лише ті файли, які я хочу видалити, а потім:
$ rm -f $(<list)
або
$ rm -f `cat list`
(Знову ж таки, це передбачає, що жодне з назв файлів не містить забавних символів, особливо пробілів.)
Або, редагуючи listфайл, я можу додати rm -f до початку кожного рядка, а потім:
$ . ./list
або
$ source ./list
Редагування файлу - це також можливість додавати лапки, де це необхідно, наприклад, змінюючи rm -f foo barна rm -f 'foo bar'.