
Мне нужно удалить все файлы в папке, имена которых имеют fcrjlog-11-21-2019-1.txt
формат. Я хочу удалить все файлы с таким именем в папке.
решение1
find . ! -type d -name 'fcrjlog-??-??-????-?.txt' -delete
(замените -delete
на -exec rm -f {} +
, если ваш find
не поддерживает нестандартное -delete
расширение).
?
это подстановочный оператор, который обозначаетлюбой отдельный символ. Заменить на [[:digit:]]
для соответствия только символам десятичных цифр (0123456789).
! -type d
исключает файлы типакаталог(которые -delete
не могут быть удалены, если они не пусты в любом случае), вы можете заменить на , -type f
чтобы сделать их еще более ограничивающими (включить толькообычныйфайлы, за исключением всех других типов файлов, включая символические ссылки, каталоги, сокеты, fifo, устройства...). GNU find
также поддерживает -xtype f
выбор файлов, которые определены какобычныйпосле разрешения символической ссылки.
Заменить fcrjlog
на *
для соответствия любому количеству символов или ?*
любой непустой последовательности символов или [!.]*
любой непустой последовательности символов, первый из которых не является .
(для исключения скрытых файлов).
решение2
Обычно выставляются некоторые из вещей, которые вы уже пробовали — так вы получите больше ответов. Для этого вопроса вам нужно поискать регулярные выражения и понять некоторые концепции. Я предполагаю, что «x» в ваших временных метках — это числа? Если так, то это регулярное выражение поможет вам начать:
/tmp>ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$"
test-12-12-1234-9.txt
/tmp>rm $(ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$")
Разбираем на части:
"
[0-9]{2} -- Exactly two numeric characters
- -- A literal dash "-"
[0-9]{2} -- Exactly two numeric characters
- -- A literal dash "-"
[0-9]{4} -- Exactly four numeric characters
- -- A literal dash "-"
[0-9] -- One numeric character
. -- Any character. Use \. to insist on a dot
txt -- The literal string "txt"
$ -- An anchor that means the txt has to be at the end of the line
"