Список всех архивных файлов

Как я могу получить список всех архивных файлов в папке рекурсивно, не зная расширения файла?

2 ответа

Вы можете использовать file утилита для попытки классификации файла на основе последовательности тестов файловой системы, магических тестов и языковых тестов - например,

$ file pynauty-0.5.tar 
pynauty-0.5.tar: POSIX tar archive (GNU)

$ file opencv-2.4.10.zip
opencv-2.4.10.zip: Zip archive data, at least v1.0 to extract

При запуске для сжатых файлов по умолчанию просто сообщается, что он содержит "сжатые данные", но вы можете изменить это поведение, используя -z переключатель

 -z, --uncompress
         Try to look inside compressed files.

т.е.

$ file -b octave-4.0.0.tar.gz 
gzip compressed data, from Unix, last modified: Tue May 26 12:35:47 2015, max compression

в то время как

$ file -zb octave-4.0.0.tar.gz 
POSIX tar archive (gzip compressed data, from Unix, last modified: Tue May 26 12:35:47 2015, max compression)

Исходя из этого, вы можете попробовать запустить file -zb в пределах find команда и grepслово "archive": что-то вроде

find . -type f -exec sh -c 'file -zb "$1" | grep -q "archive"' _ {} \; -print

-b Переключатель предотвращает ложные совпадения в имени файла.

Вы можете проверить тип файла с помощью этой команды для архива / файла без расширения:

% file tar-latest            
tar-latest: XZ compressed data

или другой пример:

% file foo          
foo: Zip archive data, at least v2.0 to extract

Перечислить все архивы

find . -type f -exec file {} \; | awk '/compressed|archive/'

пример

% find . -type f -exec file {} \; | awk '/compressed|archive/'
./tar-latest: XZ compressed data
./foo: Zip archive data, at least v2.0 to extract
Другие вопросы по тегам