파일과 이름이 같은 폴더에 압축을 푼다(.zip 확장자 제외).

파일과 이름이 같은 폴더에 압축을 푼다(.zip 확장자 제외).

파일(예: foo.zip)을 동일한 이름( )의 폴더에 압축을 푸는 방법은 무엇입니까 foo/?

기본적으로 (현재 폴더 대신) 동일한 이름을 가진 폴더에 파일의 압축을 푸는 unzip 별칭을 만들고 싶습니다. 이것이 Mac의 unzip 유틸리티가 작동하는 방식이며 CLI에서도 동일한 작업을 수행하고 싶습니다.

답변1

나는 사용한다unar이를 위해 기본적으로 아카이브에 여러 개의 최상위 파일이나 디렉터리가 포함되어 있는 경우 추출된 콘텐츠를 저장할 디렉터리를 생성하고 설명대로 아카이브 이름을 따서 이름을 지정합니다.

unar foo.zip

다음 옵션을 사용하면 모든 경우에 디렉터리 생성을 강제할 수 있습니다 -d.

unar -d foo.zip

또는 함수에서 다음을 통해 이 작업을 수행할 수 있습니다 unzip.

unzd() {
    if [[ $# != 1 ]]; then echo I need a single argument, the name of the archive to extract; return 1; fi
    target="${1%.zip}"
    unzip "$1" -d "${target##*/}"
}

이것

target=${1%.zip}

줄은 .zip다른 것에 관계없이 확장자를 제거합니다(따라서 는 , 는 됩니다 foo.zip) . 이것foo~/foo.zip~/foo

${target##*/}

매개변수 확장마지막에 모두 삭제 /하면 ~/foo됩니다 foo. 이는 함수가 .zip현재 디렉터리에서 해당 파일의 이름을 딴 디렉터리로 모든 파일을 추출한다는 의미입니다. unzip $1 -d "${target}"아카이브를 옆 디렉토리에 추출하려면 이 옵션을 사용하십시오.

unarmacOS(및 해당 GUI 애플리케이션,보관 취소), Windows 및 Linux는 다양한 배포판으로 패키징되어 있습니다.예를 들어 unarDebian 및 그 파생물, Fedora 및 그 파생물, community/unarchiverArch Linux.

답변2

다음은 1-liner를 사용하여 현재 디렉터리의 여러 zip 파일을 처리할 수 있는 또 다른 변형입니다.

for f in *.zip; do unzip "$f" -d "${f%.zip}"; done

파일이 하나만 있는 경우(즉, 함수에 사용되는 경우) 다음과 같습니다.

unzip "$1" -d "${1%.zip}"

답변3

사용압축 풀기 -d exdir zipfile.zipzip 파일을 특정 디렉터리에 추출합니다. 원칙적으로 게시물을 문자 그대로 읽으면 다음과 같은 함수를 작성할 수 있습니다.

unzip_d () {
    unzip -d "$1" "$1"
}

당신이 원하기 때문에. 압축확장이 제거되었지만 특수 변수 구문을 사용하여 이 작업을 수행할 수 있습니다.

unzip_d () {
    zipfile="$1"
    zipdir=${1%.zip}
    unzip -d "$zipdir" "$zipfile"
}

관련 정보