압축을 풀고 출력 이름을 변수에 저장합니다.

압축을 풀고 출력 이름을 변수에 저장합니다.

항상 같은 이름을 갖는 zip 파일이 있습니다: toto.zip 안에는 단 1개의 파일이 있으며 버전에 따라 이름이 변경될 수 있습니다: totoInstaller-20210321_titi.pkg

쉘 스크립트(저는 macOS를 사용하고 있습니다)에서 추출된 파일의 이름을 추출하고 나중에 사용할 수 있도록 변수에 저장하고 싶습니다... 제가 하는 일은 아무것도 없습니다... 도움을 주셔서 감사합니다.

답변1

filename=$(unzip toto.zip | awk 'sub(/^[[:space:]]*inflating:[[:space:]]+/,""){print; exit}')

모든 awk는 강력하고 효율적으로 작동해야 합니다(그러나 테스트되지는 않음). 또한 의 출력에 대해 유사한 작업을 수행하는 것도 고려해 보십시오 unzip -l.

답변2

이렇게 하면 작동합니다(때때로 한 시스템에서 다른 시스템으로 사용 가능한 버전과 버전 sed에 차이가 있기는 하지만).unzip

filename=$(unzip toto.zip | sed -n 's/^[[:space:]]*inflating:[[:space:]]*//p')

이 명령은 파일의 압축을 풀고 출력을 으로 보냅니다 sed. sed공백으로 시작하고 로 끝나는 줄을 찾습니다 inflating:. 그러한 줄이 발견되면 sed는 inflating:다음 공백을 포함하여 모든 것을 제거한 다음 남은 파일 이름을 인쇄합니다. 다른 모든 것은 삭제됩니다( 옵션 덕분에 -n). 마지막으로 출력을 변수에 저장합니다 filename.

답변3

감사합니다. sed와 awk 모두 작동합니다. 둘 다 다듬기 위해 끝에 추가 공간을 남겨두더라도 마찬가지입니다.

여기서 unzip -l을 사용하는 이유는 무엇입니까?

관련 정보