내용이 다음과 같은 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
?
지금은 unzip
zip 파일을 추출하는 데 사용하고 있지만 사용하기 더 쉬운 다른 명령줄 도구도 사용할 수 있습니다.
답변1
나는 간단하게 제안하고 싶습니다:
- 새로운 새 디렉토리로 추출
- 추출 후 새 디렉터리에 정확히 하나의 하위 디렉터리가 포함된 경우 해당 디렉터리 안의 모든 파일을 한 수준 위로 이동하고 원래 하위 디렉터리를 제거합니다.
그건 그렇고, 아카이브 만들기 (tar, zip 등)없이하위 디렉토리 내부에 아카이브의 모든 구성원을 두는 것은사악한. 사람들이 왜 그러는지 모르겠어요!
답변2
시중에는 여러 가지 스마트 추출 도구가 있습니다(제가 직접 작성한 후 알게 되었습니다). dtrx
(를 사용하여 설치 ) 를 보고 싶을 수도 있습니다 sudo apt-get install dtrx
.
dtrx
언제나아직 아카이브에 없으면 최상위 디렉토리를 만듭니다. bash 래퍼 스크립트( dtrx
대신 호출 unzip
)를 적용하면 하위 디렉터리를 멀리 이동하고 최상위 디렉터리만 제거하면 되기 때문에 훨씬 더 간단해집니다(후자가 항상 있기 때문입니다).