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
사용 unzip
및 grep
:
(참고: 이 답변은 @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으로 파일을 추출합니다. 추출 중에 각 파일의 이름이 인쇄됩니다.