Удалить файлы, содержащие определенные символы

Удалить файлы, содержащие определенные символы

У меня есть список файлов в каталоге, и мне нужно удалить все файлы, которые содержат 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

Связанный контент