모든 zip에 대해 구조를 유지하면서 작업 디렉토리에 압축을 푼다.

모든 zip에 대해 구조를 유지하면서 작업 디렉토리에 압축을 푼다.

이 명령을 사용하세요

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

.zip 아래에서 모든 zip 파일을 찾을 수 있습니다. (디렉토리)를 현재 작업 디렉토리에 추출하고, 하지만, 구조가 사라집니다.

/backUp/pic1/1-1.zip
/backUp/pic1/1-2.zip
/backUp/pic2/2-1.zip
/backUp/pic2/2-2.zip
/backUp/pic3/3-1.zip
/backUp/pic3/3-2.zip
/backUp/pic3/3-3.zip

Current command result:
/new/1-1
/new/1-2
/new/2-1
/new/2-2
/new/3-1
/new/3-2
/new/3-3





desired  result  
/new/pic1/1-1 
/new/pic1/1-2 
/new/pic2/2-1
/new/pic2/2-2
/new/pic3/3-1
/new/pic3/3-2
/new/pic3/3-3

여기에 질문했지만 코드가 작동하지 않습니다 이 명령에서 dirname과 basename은 무엇이어야 합니까?

답변1

대신 findwith 매개변수를 사용할 수 있습니다 .-execdir-exec

-execdir현재 작업 디렉터리가 아닌 파일이 있는 디렉터리에서 명령을 실행합니다.

예:

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

이것이 정확히 귀하가 요구하는 내용은 아니지만 원하는 결과를 얻기 위해 추가할 수 있는 몇 가지 단계가 있습니다.

mkdir new
cp -a backUP/* new/
#run unzip operation
cd new
find . -name '*.zip' -execdir unzip {} \;
#remove all .zip files
find . -name '*.zip' -exec rm {} \;

관련 정보