Если вы хотите удалить все файлы, имена которых соответствуют определенной форме, подстановочный знак (шаблон glob) является наиболее простым решением. Некоторые примеры:
$ 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, могут не поддерживать $(...)
синтаксис. Вы можете использовать эквивалентный синтаксис обратной кавычки:
$ 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'
.