다음과 같이 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 아카이브 구성원 경로 목록만 가져오는 방법 중 하나.