나는 많은 수의 파일이 포함된 디렉토리를 포함하는 tar 아카이브를 가지고 있으며, 압축을 풀지 않고 디렉토리만 나열하고 싶습니다(디렉토리의 파일 이름을 가능한 한 빨리 알기 위해).
나는 다음을 실행했다:
tar -tf filename.tar.gz
디렉토리가 필요할 때 실행은 재귀적으로 출력됩니다.
이 디렉토리를 어떻게 "필터링"할 수 있습니까?
답변1
아카이브의 최상위 수준에서 모든 이름을 얻으려면 다음을 수행하십시오 tar
.
tar -tf archive.tar | cut -d '/' -f 1 | sort -u
이렇게 하면 아카이브의 내용이 나열되고 /
각 줄 앞의 첫 번째 비트가 제거됩니다. 결과를 정렬하고 중복 항목을 제거합니다. 아카이브에 최상위 디렉터리(파일 및 하위 디렉터리가 포함될 수 있음)가 하나만 포함되어 있는 경우 결과는 해당 디렉터리의 이름이 됩니다.
최상위 이름에 줄 바꿈이 포함되어 있으면 결과는 tar
사용된 구현에 따라 달라집니다(GNU로 인코딩된 줄 바꿈이 포함된 문자열을 얻게 됩니다 \n
( tar
GNU는 tar
탭과 이름의 다른 문자도 인코딩함)). 그리고 BSD에서 두 개의 별도 문자열을 얻습니다 tar
. .
예:
$ tar -tf archive.tar
README.txt
source
source/program.c
$ tar -tf archive.tar | cut -d '/' -f 1 | sort -u
README.txt
source
마찬가지로, 아카이브의 최상위 수준에 디렉터리가 하나만 포함되어 있으면 해당 이름이 반환됩니다.
답변2
예를 들어 gnuchess-6.2.5.tar.gz
, 루트 디렉토리 이름만 얻으려면 다음을 수행하십시오.
[David@Fedora64 projects]$ tar -tf gnuchess-6.2.5.tar.gz | grep -e "\/$" | head -n1
gnuchess-6.2.5/
[David@Fedora64 projects]$
유사한 구조의 파일과 같이 이것이 아무 작업도 수행하지 않는 경우 mediawiki-1.33.0.tar.gz
파일의 첫 번째 줄을 보고 루트 디렉터리 이름을 얻을 수 있습니다 tar
.
[David@Fedora64 Downloads]$ tar -tf mediawiki-1.33.0.tar.gz | head -n1
mediawiki-1.33.0/.phan/config.php
[David@Fedora64 Downloads]$
...루트 디렉토리는 mediawiki-1.33.0
.
답변3
$ tar -tf mytar.tar | tree -L 1 --fromfile # show top level