tar의 압축을 풀고 해당 디렉터리로 들어갑니다(쉘 스크립트).

tar의 압축을 풀고 해당 디렉터리로 들어갑니다(쉘 스크립트).

스크립트가 tar를 추출한 다음 추출된 tar 디렉토리로 이동하도록 하려면 어떻게 해야 합니까?

나는 노력하고있다

발췌

#!/bin/bash
tar -xvf $1 && cd $1

사용예

다음과 같은 사용법이 있다고 가정합니다 foo.tar.xz ../xtract foo.tar.xz

그러면 제 문제가 매개변수에 있다는 것을 알 수 있습니다. 성공적으로 추출했지만 파일 확장자 때문에 입력할 수 없습니다. 그러면 foo디렉토리 로 이동할 수 있도록 매개변수에서 이를 제거하는 방법은 무엇입니까?

답변1

쉘 스크립트는 상위 프로세스(스크립트를 호출한 쉘)의 작업 디렉토리를 변경할 수 없습니다. 따라서 생성한 디렉토리로 변경할 수 있는 동안존재하다스크립트의 경우, 스크립트가 종료되면(특정 디렉토리가 프로세스의 현재 디렉토리라는 사실을 포함하여 해당 환경이 파괴됨) 스크립트를 실행할 때 있었던 디렉토리를 찾을 수 있습니다.

그러나 셸 기능은 현재 셸 세션 내에서 실행되며 cd세션의 현재 작업 디렉터리는 예상대로 설정될 수 있습니다.

다음은 tar명령줄에 지정된 아카이브를 추출하려고 시도하고 성공할 경우 아카이브 이름과 함께 제공된 디렉터리로 변경하고 .tar끝에서 제거하는 셸 함수입니다(이 작업은 표준 방법을 사용하여 수행됩니다).매개변수 확장).

xtract () {
    tar -x -v -f "$1" &&
    cd -- "${1%.tar}"
}

위의 내용을 셸에 붙여넣어 이 함수를 정의하거나 일반적으로 셸 함수 및 별칭을 추가하는 곳에 추가할 수 있으며, 시작하는 다음 셸 세션에서 사용할 수 있습니다.

xz압축된 아카이브를 지원하려면 위 기능을 변경하여 시스템에 tar맞는 옵션을 사용하거나 ( 예: GNU 사용 ) 아카이브를 . 주어진 아카이브 파일 이름의 끝에서 제거하는 대신 삭제됩니다 .tar-J--xztarxz -d -c -- "$1"tar -x -v -f -cd.tar.xz.tar

tar압축 알고리즘을 올바르게 결정하기 위해 파일 이름 접미사를 사용할 만큼 똑똑하다면 다음을 사용할 수 있습니다.

xtract () {
    tar -x -v -f "$1" &&
    cd -- "${1%.tar.*}"
}

이전 함수와의 차이점은 먼저 .tar점을 제거한 다음 점을 제거한 다음임의의 문자열cd입력하려는 디렉토리에 도달하려면 아카이브 이름 끝에서 시작하십시오 .

관련 정보