여러 zip 파일에서 특정 파일의 압축 풀기

여러 zip 파일에서 특정 파일의 압축 풀기

저는 Unix를 처음 접했고 여러 zip 파일에서 특정 패턴 파일 이름을 추출하려고 합니다. 저는 findzip 파일을 찾아서 zip 파일에 있는 CTL이라는 파일을 추출하려고 했습니다 a*b*zip.

$ unzip -jn 'find $source_dir -mtime -$st_d -daystart -iname "a*zip"' \
    *CTL* -d $target_dir`

이 외에도 다음을 사용해 보았습니다.

$ find -type f -newermt $start_date \! -newermt $end_date -name "a*zip" \
    | while read filename; do unzip -d $target_dir; done;`

하지만 이것은 모든 파일을 추출하는 것이지만 파일 이름이 있는 파일만 찾고 있습니다.CTL.

답변1

단독으로 사용하면 간단하게 find -exec이 작업을 수행 할 수 있습니다.

find . -type f -name '*.zip' -exec unzip {}  '*CTL*' -d "$target_dir" \;

설명하다: -exec{}대체 파일 이름이 발견된 각 파일에 대해 다음 명령이 실행됩니다. 명령은 로 종료되어야 합니다 ;. 쉘이 자체적으로 for의 종료로 해석되는 것을 방지하려면 끝에 \;(';' 이스케이프)를 사용하고 대신 일반 텍스트로 전달하십시오.\;findfind

'*CTL*'또한 파일 패턴이 인수로 전달될 때 파일 패턴을 따옴표 로 묶는 것이 가장 좋습니다 *CTL*. 이렇게 하면 쉘이 파일 이름을 확장하지 않아도 됩니다. 예를 들어 이 경우 zip 파일 중 하나 abcCTL.zip의 파일 이름에 CTL(예: )이 포함되어 있다고 가정해 보겠습니다 . *CTL*패턴 만 사용하면 쉘이 패턴을 확장하고 패턴을 전달하는 대신 unzip파일 이름을 전달하는데 abcCTL.zip이는 분명히 원하는 것이 아닙니다.

관련 정보