압축을 풀지 않고 zip에서 특정 파일 이름을 추출합니다.

압축을 풀지 않고 zip에서 특정 파일 이름을 추출합니다.

다음과 같이 zip 파일의 내용을 나열합니다.

wladmin@solarishost:/tmp$ unzip -l -q /tmp/package-391.zip | awk '{ print $4 }' | sed -n '3,$p' | grep -v '^$'
myapp/src/stage/bras.war
myapp-configuration/src/config/dev/bras.war
myapp-configuration/src/config/dev/deployfiles/acid.properties
myapp-configuration/src/config/perf/deployfiles/acid.properties
myapp-configuration/src/config/prod/deployfiles/acid.properties
myapp-configuration/src/config/qa/deployfiles/acid.properties
myapp-configuration/src/config/uat/deployfiles/acid.properties

위에서는 deployfile가 있고 없는 모든 파일 이름을 가져와서 삭제된 파일 목록을 만들고 싶습니다 DEV. 아래 방법을 사용하여 이 작업을 수행할 수 있습니다.

wladmin@solarishost:/tmp$ unzip -l -q /tmp/package-391.zip | awk '{ print $4 }' | sed -n '3,$p' | grep -v '^$' | grep deployfiles | grep -v -i DEV
myapp-configuration/src/config/perf/deployfiles/acid.properties
myapp-configuration/src/config/prod/deployfiles/acid.properties
myapp-configuration/src/config/qa/deployfiles/acid.properties
myapp-configuration/src/config/uat/deployfiles/acid.properties

남은 것 즉.

myapp/src/stage/bras.war
myapp-configuration/src/config/dev/bras.war
myapp-configuration/src/config/dev/deployfiles/acid.properties

나머지 출력에서 ​​두 번 이상 나타나는 파일 이름을 얻고 싶습니다.

myapp-configuration/src/config/dev/bras.war

삭제된 파일 목록에 추가하고

최종 원하는 출력:

myapp-configuration/src/config/perf/deployfiles/acid.properties
myapp-configuration/src/config/prod/deployfiles/acid.properties
myapp-configuration/src/config/qa/deployfiles/acid.properties
myapp-configuration/src/config/uat/deployfiles/acid.properties
myapp-configuration/src/config/dev/bras.war

최종 목표는 원하는 최종 출력 목록이 포함된 zip에서 이러한 파일을 제거하고 다음 2개 파일만 사용하여 zip을 다시 작성하는 것입니다.

myapp/src/stage/bras.war
myapp-configuration/src/config/dev/deployfiles/acid.properties

제안해주세요.

wladmin@solarishost:/tmp$ uname -a

SunOS solarishost 5.11 11.4.62.151.3 sun4v sparc sun4v non-global-zone

답변1

다소 복잡한 사양입니다. 내가 올바르게 이해했다면 경로에 포함되지 않은 아카이브 멤버 목록을 원하고 deployfiles(대소문자를 구분하지 않는 한 dev) 동일한 기본 이름을 가진 후속 파일을 무시해야 합니다.

그래서:

zipinfo -1 file.zip | nawk -F/ '
  (! /deployfiles/ || tolower($0) ~ /dev/) && !seen[$NF]++'

zipinfo -l존재하다zip 아카이브 구성원 경로 목록만 가져오는 방법 중 하나.

관련 정보