우분투 터미널을 통해 같은 이름의 새 폴더에 여러 개의 zip 파일을 추출하십시오.


36

많은 zip 파일 a.zip, b.zip, c.zip, ...이 있으며 터미널을 통해 각각 새 폴더 a, b, c, ... 로 추출하고 싶습니다 .

실제로, 내가 원하는 것은 find실제로 2014, 2013, 2012 등 많은 폴더가 있기 때문에 나중에 사용할 수있는 솔루션입니다 ... 각 폴더 에는 많은 zip 파일 a.zip, b.zip 등이 포함되어 있습니다. find . -name "*.zip" -exec {} unzip \;모든 파일의 압축을 풀고 해당 상위 폴더에 넣습니다.


답변:


70

압축 해제 -d옵션 을 사용 하여 아카이브 내용에 대한 대체 디렉토리를 설정할 수 있어야합니다 .

unzip -d a a.zip
unzip -d b b.zip

등등. find표현식 내에서 쉘 매개 변수 확장을 사용하여 zip 파일 이름에서 디렉토리 이름을 파생시킬 수 있어야합니다.

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

echoie 를 추가하여 먼저 테스트하십시오.

find -name '*.zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;

또는 같은

while read -rd $'\0' f; do 
  unzip -d "${f%.*}" "$f"
done < <(find -name '*.zip' -print0)

1
test it first…부품 +1
mrzmyr

2
find디렉토리가 필요합니다find . -name ...
slf

@slf POSIXly, 그렇습니다. 그러나 GNU의 경우에는 그렇지 않습니다find ( "시작점이 지정되지 않은 경우 .가정됩니다." )
steeldriver

10

나는 이미 다른 명령으로 그것을 수행했으며 이미 다른 방식으로 적용 할 수 있음을 깨닫기 위해 이것을 직접 찾았습니다.

찾기 방법은 아무 이유없이 지나치게 복잡합니다.

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

이것은 당면한 질문에 대한 최상의 답변을 제시합니다. 이전 폴더는 우스꽝스럽고 이후 파일은 각 루트 폴더로 분류되지 않습니다.
TheMegolith

어떻게 디렉토리를 만드는 방법에 대해 갈 것 없이.zip 접미사? 친구를 요청합니다.
대시

답은 .zip 접미사가있는 디렉토리를 작성하지 않으며, 이는 중괄호 내의 부분의 핵심입니다.
kencinder

6

간단히 사용

unzip '*.zip' -d /home/user/folder/

10
내가 빠진 것이 아니라면 / home / user / folder / a 및 / home / user / folder / b가 아닌 / home / user / folder에 모든 압축을 풉니 다.
M. Justin

0

unrar을 사용 하여이 작업을 수행해야했습니다. 이것은 kencinder의 코드를 약간 수정하여 얻을 수 있습니다.

for i in *.rar; do mkdir "${i%%.rar}"; unrar x -r "$i" "${i%%.rar}"; done 

추신 : 나는 이것을 주석으로 추가하고 싶었지만 평판이 충분하지 않습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.