파일 배치 풀기


33

내가 시도 할 때

 unzip filename.zip

작동합니다. 그러나 일련의 zip 파일을 압축 해제해야합니다.

왜:

 find . -name "*.zip" -print0 | xargs -0 unzip

또는

 ls *.zip | xargs unzip

작동하지 않는?

두 경우 모두 "주의 : 파일 이름이 일치하지 않습니다 :"메시지가 나타납니다.

답변:


48

다음 명령을 발행 할 수 있습니다.

$ unzip '*.zip'

여기를 참조하십시오 .


나는 그것을 명확하게 말하지는 않았지만 모두 같은 디렉토리에 있지는 않습니다. 따라서 find 출력이 필요합니다.
Jeannoburto

4
감사. 이것은 실제 질문과 완벽하게 일치하지만 내 문제를 해결했습니다. 나는 노력 unzip *하고 있었고 caution: filename not matched모든 파일에 대해 반환 되었지만 unzip '*.zip'작업을 수행했습니다.
Ivan

27

모든 파일을 동일한 명령 줄에 채우므로 명령이 작동하지 않습니다. 그것은 대부분의 프로그램에서 작동하지만 unzip첫 번째 인수는 zip 파일로, 첫 번째 인수는 첫 번째 인수를 파일로 추출합니다. 각 파일마다 한 번씩 명령을 실행해야합니다.

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

또는

find . -name '*.zip' -exec unzip {} \;

두 번째 파일은 실제로 많은 파일이있는 경우 더 나은 것 같습니다. (그렇지 않으면 xargs로 명령이 너무 길다고 불평했습니다)
Recct

5

bash에서 다음을 수행 할 수도 있습니다.

for i in *.zip; do
    unzip "$i"
done

또한 unzip 걸릴 수 있습니다 -d당신이 다른 위치에 출력을 타겟팅 할 수 있도록 스위치를.

예를 들면 다음과 같습니다.

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done

1

위에서 주어진 루핑보다 훨씬 쉬운 해결책이 있습니다. 디렉토리 -d플래그를 사용하십시오 .

unzip -o somefiles.zip -d $directoryPath

-d파일을 찾을 디렉토리가 아닌 추출 할 디렉토리를 지정합니다.
LegendaryDude
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.