zip 아카이브의 각 구성원에서 처음 N 줄을 읽습니다.

zip 아카이브의 각 구성원에서 처음 N 줄을 읽습니다.

Ten.zip으로 압축된 10개의 파일이 있습니다. 압축 파일의 10개 파일 전체에서 처음 n 줄(예: 2 줄)을 읽는 방법은 무엇입니까? 간단한 명령이 있나요?

답변1

unzip 자체는 이 기능을 제공하지 않기 때문에 "간단한" 명령이 없습니다. 파일의 일부 또는 전체를 추출하고 자체적으로 처리하도록 요청해야 합니다. 또 다른 접근 방식은 다음과 같습니다.

zipinfo -1 Ten.zip | while IFS= read -r filename
do 
  unzip -p Ten.zip "$filename" | sed 2q
done

여기서 차이점은 zipinfo아카이브의 내용을 한 줄에 하나씩 나열하는 데 사용한다는 것입니다. 그런 다음 해당 파일 이름을 한 줄씩 읽고 파일을 화면에 추출하도록 요청 합니다 unzip.-p아니요print) 그런 다음 sed파이프(기본값)를 통해 인쇄하고 라인 2에서 종료됩니다.

보관하는 파일 이름에 개행 문자가 포함되어 있으면 이 작업이 실패할 수 있습니다. 그러나 압축을 풀면 추출 시 파일 이름이 손상되므로 이 작업을 수행해서는 안 됩니다.

$ touch file$'\n'name
$ zip foo.zip file*name
$ rm file*name
$ zipinfo -1 foo.zip
file^Jname
$ unzip foo.zip
Archive:  foo.zip
 extracting: filename
$ ls -lrt
...
filename

답변2

사용 unzipgrep:

(참고: 이 답변은 @RomanPerekhrest의 답변을 참조하며여기에 게시물이 있습니다.)

bash-3.2$ unzip -l ten.zip
Archive:  ten.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        6  02-07-2018 09:16   0.txt
        6  02-07-2018 09:16   1.txt
        6  02-07-2018 09:16   2.txt
        6  02-07-2018 09:16   3.txt
        6  02-07-2018 09:16   4.txt
        6  02-07-2018 09:16   5.txt
        6  02-07-2018 09:16   6.txt
        6  02-07-2018 09:16   7.txt
        6  02-07-2018 09:16   8.txt
        6  02-07-2018 09:16   9.txt
---------                     -------
       60                     10 files
bash-3.2$

압축 파일의 내용을 stdout/screen으로 추출합니다.

bash-3.2$ unzip -c ten.zip | grep -A2 extracting
 extracting: 0.txt
0
0
--
 extracting: 1.txt
1
1
--
 extracting: 2.txt
2
2
--
 extracting: 3.txt
3
3
And so on..

주문하다: unzip -c ten.zip | grep -A[n] extracting. 여기서 "n"은 사용자가 보려는 행 수일 수 있습니다.

답변3

unzip+awk해결책:

10xml.zip파일 구조 예시 :

$ unzip -l 10xml.zip 
Archive:  10xml.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       20  2018-02-07 11:20   home/osboxes/temp_files/1.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/2.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/3.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/4.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/5.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/6.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/7.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/8.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/9.xml
       21  2018-02-07 11:20   home/osboxes/temp_files/10.xml
---------                     -------
      201                     10 files

  • unzip -l <archive>- 아카이브 파일 목록(짧은 형식)

아카이브의 각 파일에서 처음 2줄을 추출합니다.

unzip -c 10xml.zip | awk -v n=2 'NR==1{ next }/^ +inflating:/{ n=NR+2; next }n && NR<=n'
  • unzip -c <archive>- stdout/screen으로 파일을 추출합니다. 추출 중에 각 파일의 이름이 인쇄됩니다.

관련 정보