Список всех архивных файлов
Как я могу получить список всех архивных файлов в папке рекурсивно, не зная расширения файла?
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