Перечислите все архивные файлы

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

2
задан 21 June 2015 в 14:52

2 ответа

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

% 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
0
ответ дан 2 December 2019 в 03:53

Можно использовать 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 в a find команда, и grepлуг для слова"archive": что-то как

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

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

2
ответ дан 2 December 2019 в 03:53

Другие вопросы по тегам:

Похожие вопросы: