특정 경로(예: /opt/uploading/"*"/multiple .zip
파일)에서 zip 파일을 동적으로 검색하여 zip 파일과 동일한 폴더에 추출하는 방법은 무엇입니까?
아래 기능은 여러 zip 파일의 압축을 풀고 zip 파일을 삭제하는 기능입니다. 하지만 압축이 풀린 파일과 함께 zip 파일이 존재하기를 원합니다.
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
이는 해당 결과를 찾은 모든 행에 대해 반복됩니다.
물론 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 파일이 나타날 때까지 기다릴 필요가 없습니다.