Я хотел бы отсканировать мой жесткий диск на наличие всех сжатых наборов файлов, таких как zip, gzip, bzip и других, и найти содержимое этих файлов для определенных типов файлов (например, изображений). Антивирус », поэтому я считаю, что должен быть способ.
9
foo
но неfoo.png
.Ответы:
Простейшим подходом было бы перечислить содержимое архива и искать файлы соответствующего расширения. Например, с
zip
файлом:-sf
Опция указываетzip
на список файлов , содержащихся в архиве. Затем,grep
поиск будет.png
или.jpg
в конце строки ($
).-E
Позволяет расширенные регулярные выражения, поэтому мы можем использовать ,|
как OR и-i
делает соответствующий нечувствительны к регистру.Однако у каждого инструмента архивации есть своя команда для просмотра содержимого. Я написал сценарий, который может работать с большинством наиболее популярных. Если вы сохраните этот скрипт как
list_compressed.sh
, вы можете запустить:Это покажет вам наиболее распространенные типы изображений. Обратите внимание, что этот подход предполагает, что тип файла может быть определен по расширению файла. Он не найдет файлы изображений, которые не имеют расширения, и не распознает файлы с неправильным расширением. Нет способа справиться с этим без фактического извлечения файлов из архива и запуска
file
на каждом из них.Если вы хотите найти все архивы, содержащие файлы изображений на вашем жестком диске, объедините вышеперечисленное с
find
:Команда находки будет искать все
.gz
,.tgz
или.zip
файлы (вы можете добавить много расширений , как вам нравится), те , которые затем пропускают через мой сценарий. В-q
Подавляете Grep нормально выход, ничего не будет напечатано.&& echo
Напечатает имя архива , только еслиgrep
был успешным.источник
-name
на-iname
. Однако в этом нет особого смысла: многим программам сжатия (например, gzip) требуется конкретное расширение.GZ
не сработаетНе так продвинут, как тердон, но это подойдет:
Сохраните следующий код в папке, где находится весь ваш код, под
finda.sh
любым другим именем, как вам нравится:Затем в директории, в которой находятся все ваши архивы, запустите ее, и это вывод:
источник
*.*
будут соответствовать только файлы с расширением. Кроме того, это будет список всех файлов во всех архивах, вы не проверяете для любого типа файла.