Удалить все файлы, имена которых соответствуют определенному шаблону

Сначала необходимо отсортировать файл1 и файл2 (используя команду sort). Затем вы можете использовать команду join.

join -a 1 file1 file2

вывод:

test4

команда -a 1 печатает строки, которые не совпадают в файле1.

справочная страница:

  -a FILENUM        print unpairable lines coming from file FILENUM, where
                      FILENUM is 1 or 2, corresponding to FILE1 or FILE2
0
16.06.2017, 16:41
2 ответа

Возможно, вы ищете шаблон

[a-z][a-z][0-9][0-9].txt

. Он будет соответствовать любому имени в текущем каталоге, состоящему ровно из двух символов нижнего регистра, за которыми следуют две цифры, за которыми следует буквенная строка . .txt.

Шаблоны подстановки имен файлов, в отличие от регулярных выражений, автоматически привязываются к началу и концу строки, поэтому нам не нужно говорить ничего особенного об именах файлов, не содержащих символы перед первым из двух символов нижнего регистра или после .txt.

Вы можете использовать этот шаблон с rm напрямую:

$ rm "$HOME"/[a-z][a-z][0-9][0-9].txt

или, если вы хотите выполнить рекурсию во все подкаталоги, с find:

$ find "$HOME" -name "[a-z][a-z][0-9][0-9].txt" -delete

Если ваша реализация найти не поддерживает -удалить, вместо этого рассмотрите следующее:

$ find "$HOME" -name "[a-z][a-z][0-9][0-9].txt" -exec rm {} +

PS: используйте слово цифра, когда вы имеете в виду число от нуля до девяти. число немного расплывчато, тем более что 233, которое является частью нескольких имен файлов в примерах, является числом. (С тех пор я отредактировал вопрос, чтобы устранить эту двусмысленность)

4
28.01.2020, 02:16

Что насчет этого?

find /path/to/parent/dir/ -regextype posix-extended -regex '.*/[a-z]{2}[0-9]{2}\.txt' -exec rm {} \; 
1
28.01.2020, 02:16

Теги

Похожие вопросы