web-dev-qa-db-ja.com

すべてのアーカイブファイルを一覧表示する

ファイル拡張子を知らなくても、フォルダ内のすべてのアーカイブファイルのリストを再帰的に取得するにはどうすればよいですか?

2
Sceptical Jule

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)

これに基づいて、findコマンド内でfile -zbを実行して、単語 "grep"をarchiveingすることができます。

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

-bスイッチは、ファイル名の誤った一致を防ぎます。

2
steeldriver

次のコマンドを使用して、拡張子のないアーカイブ/ファイルのファイルタイプを確認できます。

% 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
A.B.