특정 경로의 zip 파일을 동적 검색하고 압축이 풀린 파일과 동일한 폴더에 압축을 풀겠습니까?

특정 경로의 zip 파일을 동적 검색하고 압축이 풀린 파일과 동일한 폴더에 압축을 풀겠습니까?

특정 경로(예: /opt/uploading/"*"/multiple .zip파일)에 있는 zip 파일의 동적 검색을 수행하고 zip 파일이 있는 동일한 폴더에 압축을 풀려면 어떻게 해야 합니까?

아래 기능은 여러 zip 파일의 압축을 풀고 zip 파일을 제거하는 것입니다. 하지만 zip 파일이 unzip 파일과 함께 있기를 원합니다.

while true; do
   find -iname '*.zip' > zipindex
   test -s zipindex || break
   for zip in $(cat zipindex); do unzip -o $zip && rm $zip; done
done

답변1

rm $zip.Zip 파일을 제거하는 중이므로 제거하세요 .

답변2

이는 while 루프보다 for 루프에 훨씬 더 적합합니다. 이렇게 하면 불필요한 결과 저장을 제거할 수도 있습니다.find -iname '*.zip' > zipindex

대신 다음과 같이 하십시오:

#!/bin/bash

for zip in $(find -iname '*.zip'); do
    unzip -o $zip
done

이는 find가 생산하는 모든 라인을 반복합니다.

물론 bash 스크립트를 모두 생략하고 다음과 같이 find oneliner를 만들어야 합니다.

find -iname '*.zip' -execdir unzip {} \;

편집: @don_crissti 및 @ilkkachu 덕분에 -exec에서 다른 쉘 인스턴스 호출을 제거할 수 있었습니다. -execdir을 알아두면 좋습니다!

답변3

GNU Parallel을 사용하면 다음과 같은 작업을 수행할 수 있습니다.

find my_dir | grep -E '\.zip$' | parallel unzip
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir | grep  -E '\.zip$' | parallel -u unzip

이렇게 하면 다음 zip 파일이 나타날 때까지 바쁘게 기다릴 필요가 없습니다.

관련 정보