항상 같은 이름을 갖는 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을 사용하는 이유는 무엇입니까?