Команда Терминала для удаления файлов с расширением 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
угадывает кодировку текстового файла читая его кусочек? Она может и ошибиться.