단일 파일을 사용하여 아카이브의 압축을 풀고 아카이브 이름과 일치하도록 출력 이름을 바꿉니다.

단일 파일을 사용하여 아카이브의 압축을 풀고 아카이브 이름과 일치하도록 출력 이름을 바꿉니다.

목표는 많은 zip 파일의 압축을 풀고 결과 파일의 이름을 원래 아카이브 이름으로 바꾸는 것입니다.

많은 zip 파일이 포함된 폴더의 경우 대부분 이름이 이라는 파일이 포함되어 있지만 bla.txt물론 몇 가지 예외도 있습니다. 우리 모두 알고 있듯이 모든 파일에는 txt 파일인 파일이 있습니다.

./zips/
    a.zip - contains bla.txt
    b.zip - contains bla.txt
    c.zip - contains somethingelse.txt
    d.zip - contains bla.txt
    ...   - ...

출력은

./zips/
    a.txt
    b.txt
    c.txt
    d.txt
    ...  

모든 것을 추출하고 수많은 폴더를 남겨둔 최고의 최신 사진:

for z in *.zip; do unzip $z -d $(echo 'dir_'$z); done

어쩌면 좋아

for z in *.zip; do unzip $z; mv 'content_name.txt' $z; done

그런데 콘텐츠 이름은 어떻게 얻나요?

답변1

-d아이디어를 계속 사용하여 추출된 파일의 이름을 원하는 "zip 이름 빼기 zip + txt"로 바꿀 수 있습니다.

mkdir tmp
for f in *.zip; do unzip "$f" -d tmp && mv tmp/* "${f%.zip}.txt"; done
rmdir tmp

또는 unzip의 출력을 적절한 이름의 파일로 파이프할 수 있습니다.

for f in *.zip; do unzip -p "$f" > "${f%.zip}.txt"; done

답변2

이 명령 에는 아카이브에 실제 아카이브 이름을 표시하는 unzip자체 옵션이 있으며 이 옵션은 그대로 사용됩니다 . 따라서 임시 디렉터리를 만들지 않고 간단히 다음을 수행할 수 있으며 현재 디렉터리에서 수행됩니다.unzip -Z1 zipfile.zipzipinfo's-1zipinfo -1 zipfile.zipmv

for z in *.zip; do 
    unzip "$z";
    mv "$(unzip -Z1 $z)" "${z%%.*}.txt";
done

관련 정보