.tar.gz 및 .zip 파일이 여러 개 있는데 압축을 풀지 않고도 이러한 파일에 포함된 파일 형식을 알고 싶습니다. 어떻게 해야 하나요? 명령을 사용하여 tar -tzf 'filename'
.tar.gz 파일을 나열할 수 있습니다 unzip -l 'filename'
. 이 파일에서 파일 형식을 식별하는 방법을 찾을 수 없습니다. 이 목표를 어떻게 달성할 수 있나요? 센토스 6.6을 사용하고 있습니다
명령 출력tar -tzf 'test.tar.gz'
-rw-r--r-- root/root 89403 2019-05-26 11:31 abc.tar.gz
-rw------- root/root 2842 2019-05-26 09:41 anaconda-ks.cfg
-rw-r--r-- root/root 8823 2019-05-26 09:41 install.log
-rw-r--r-- root/root 3314 2019-05-26 09:40 install.log.syslog
-rw-r--r-- root/root 122880 2019-05-26 11:28 tin.tar
-rw-r--r-- root/root 25543 2019-05-26 11:20 tito.zip
-rw-r--r-- root/root 25487 2019-05-27 07:48 tito.ZIP
산출unzip -l test.zip
Length Date Time Name
--------- ---------- ----- ----
89403 05-26-2019 11:31 abc.tar.gz
2842 05-26-2019 09:41 anaconda-ks.cfg
8823 05-26-2019 09:41 install.log
3314 05-26-2019 09:40 install.log.syslog
122880 05-26-2019 11:28 tin.tar
25543 05-26-2019 11:20 tito.zip
25487 05-27-2019 07:48 tito.ZIP
--------- -------
278292 7 files
답변1
GNU 사용 tar
:
tar --to-command='exec file -b -' -xvvf file.tar.gz
파일의 경우 다음 명령을 사용하여 zip
즉시 변환하고 GNU를 다시 사용하여 각 구성원을 호출할 수 있습니다.tar
bsdtar
tar
file
bsdtar cf - @file.zip | tar --to-command='exec file -b -' -xvvf -
다음과 같은 출력이 제공됩니다.
-rw-rw-r-- 0/0 7653 1999-12-30 10:26 WINOBJ.HLP
MS Windows 3.1 help, Thu Dec 30 15:26:17 1999, 7653 bytes
-rw-rw-r-- 0/0 7005 2006-07-28 08:32 Eula.txt
Non-ISO extended-ASCII text, with very long lines, with CRLF line terminators
-rw-rw-r-- 0/0 729464 2011-02-14 11:37 Winobj.exe
PE32 executable (GUI) Intel 80386, for MS Windows
명령 file
은 추측합니다유형파일의 처음 몇 바이트를 기반으로 휴리스틱을 사용하여 파일을 구문 분석합니다. 따라서 무슨 일이 있어도 파일에서 데이터를 추출해야 합니다. tar tvf
출력을 보고하는 경우에도 tar
각 아카이브 멤버의 콘텐츠 앞에 정보가 저장되기 때문에 전체 아카이브를 읽고 압축을 풀어야 하지만 위 솔루션 중 어느 것도 멤버를 추출하지 않습니다.디스크에, 데이터는 파이프를 통해 앞뒤로 전달되며 bsdtar
아카이브 tar
구성원의 내용은 메모리에 전체적으로 저장되지도 않습니다.tar
file
file
파일의 처음 몇 바이트를 읽고 반환한 후 GNU는 tar
이를 현명하게 처리하고 다음 아카이브 멤버에 대해 다음 명령을 실행하기 전에 (SIGPIPE에서 죽는 대신) 아카이브 멤버의 나머지 부분을 건너뜁니다 file
.
sh
효율성 관점에서 보면 하나의 명령 (해석된 exec file -b -
명령줄)과 각 일반 파일 아카이브 구성원에 대해 하나의 명령을 실행하므로 최적이 아닙니다 . file
우리는 exec
재사용을 위해 동일한 프로세스를 사용 sh
합니다 file
(이와 같은 경우 sh
구현 dash
자체는 최적화되지 않습니다).
답변2
이 file
명령은 파일 자체에 대한 정보를 알려줍니다.
$ file test.zip
test.zip: Zip archive data, at least v1.0 to extract
$ file test.tar.gz
test.tar.gz: gzip compressed data, last modified: Sun May 26 11:28:34 2019, from Uniz
그러나 아카이브에 있는 파일의 경우 해당 파일을 추출하고 file
각각을 개별적으로 실행해야 합니다.