디렉토리에 압축을 풀거나 디렉토리가 ZIP에 포함되어 있는 경우 독립 실행형

디렉토리에 압축을 풀거나 디렉토리가 ZIP에 포함되어 있는 경우 독립 실행형

내용이 다음과 같은 ZIP 파일이 있다고 가정해 보겠습니다.

# file: with_out_dir.zip
file1.txt
file2.cpp
file3.js
some_sub_dir/
- file_in_subdir.txt
file4.xml

하지만 이렇게 보일 수도 있습니다

# file: with_dir.zip
archive/
- file1.txt
- file2.cpp
- file3.js
- some_sub_dir/
-- file_in_subdir.txt
- file4.xml

지금은 bash 스크립트에서 이러한 파일을 추출하도록 하겠지만 어쨌든 /var/sample/다음과 같은 위치에 추출해야 합니다.

# expected output
/var/
- sample/
-- file1.txt
-- file2.cpp
-- file3.js
-- some_sub_dir/
--- file_in_subdir.txt
-- file4.xml

스크립트를 통해 이를 달성하는 가장 좋은 방법은 무엇입니까 bash?

현재 저는 unzipzip 파일을 추출하는 데 이 도구를 사용하고 있지만 사용하기 더 쉬운 다른 명령줄 도구를 사용해도 좋습니다.

답변1

나는 간단히 제안한다:

  • 새로운 디렉토리에 압축을 푼다
  • 추출 후 새 디렉터리에 하위 디렉터리가 하나만 포함되어 있는 경우 해당 디렉터리의 모든 파일을 한 수준 위로 이동하고 원래 하위 디렉터리를 삭제합니다.

그런데 아카이브(tar, zip 등)를 만드세요.아니요아카이브의 모든 구성원을 하위 디렉토리에 배치하는 것은사악한. 사람들이 왜 이러는지 모르겠어요!

답변2

여러 가지 스마트 추출 도구가 있습니다(직접 작성하고 나서 발견했습니다). 확인 dtrx(설치 sudo apt-get install dtrx)할 수도 있습니다.

dtrx 언제나아카이브에 아직 존재하지 않는 경우 최상위 디렉터리를 생성합니다. 그런 다음 bash 래퍼 스크립트( dtrx대신 호출 unzip)를 조정하면 하위 디렉터리를 이동하고 최상위 디렉터리를 삭제하기만 하면 되기 때문에(후자는 항상 존재하므로) 더 간단해집니다.

관련 정보