
У меня есть список файлов в каталоге, и мне нужно удалить все файлы, которые содержат 0 или 7. Я чувствую, что мне нужно использовать grep, но я не совсем уверен. Есть идеи?
решение1
То, что вы хотите сделать, это оценить ваши файлы в соответствии с определенным условным тестом и выполнить действие над каждым файлом в соответствии с результатом условного теста. Это точное назначение команды find
.
Вот портативный (POSIX-совместимый) команда для удаления обычных файлов, содержимое которых включает «0» или «7»:
find . -type f -exec grep -q '[07]' {} \; -exec rm {} +
Обратите внимание, чтоэтотрекурсивновыполняет поиск в текущем каталоге.
Если это не то, что вам нужно, вы можете проверить, -maxdepth
доступен ли основной сервер (в этом случае вы также можете использовать основной сервер -delete
; ни один из них не указан в POSIX):
find . -maxdepth 1 -type f -exec grep -q '[07]' {} \; -delete
Или вы можете применить методы, приведенные в:
решение2
grep -l '[07]' DirToYourFiles/* | xargs rm -f
grep -l
означает только список имен файлов
[07]
означает либо 0, либо 7
xargs
делает их командой.
Это предполагает, что имена файлов не содержат пробелов, символов новой строки, одинарных кавычек, двойных кавычек или обратной косой черты. С помощью утилит GNU вы можете сделать это более надежным с помощью:
grep -lZ '[07]' DirToYourFiles/* | xargs -r0 rm -f