Как я могу получить список всех архивных файлов в папке рекурсивно, не зная расширение файла?
Можно проверить тип файла с этой командой для архива/файла без расширения:
% 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
Можно использовать 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
переключатель предотвращает ложные соответствия на имени файла.