Команда Терминала для удаления файлов с расширением txt на основе вывода команды file -i *.txt

Команда file -i *.txt в консоли выводит список имён файлов, MIME, и кодировку. Как составить выражение для терминала, чтобы отфильтровать файлы, для которых строка вывода не содержит подстроку text/plain; charset=utf-8? Затрагивать нужно только в текущей папке.


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy
$ file -i *.txt
1.txt:              text/plain; charset=us-ascii
24-157.txt:         text/plain; charset=us-ascii
article.txt:        text/plain; charset=utf-8
id-numbers.txt:     text/plain; charset=utf-8

grep с флагом -v удаляет строки с указанной кодировкой.

$ file -i *.txt | grep -v "text/plain; charset=utf-8"
1.txt:              text/plain; charset=us-ascii
24-157.txt:         text/plain; charset=us-ascii

cut отрезает всё после двоеточия.

$ file -i *.txt | grep -v "text/plain; charset=utf-8" | cut -f1 -d:
1.txt
24-157.txt

Дальше сами. Надо запустить команду ниже. Вместо троеточия должен быть предыдущий конвейер. Я это не делаю, что опрометчивые пользователи себе чего-нибудь не стёрли.

$ rm `...`

P.S. Вы знаете что команда file угадывает кодировку текстового файла читая его кусочек? Она может и ошибиться.

→ Ссылка