동일한 이름을 가진 파일을 덮어쓰지 않고 여러 파일의 압축을 풉니다.

동일한 이름을 가진 파일을 덮어쓰지 않고 여러 파일의 압축을 풉니다.

내 스크립트의 초기 단계에서는 사용자가 제공한 "x"개 분량의 파일을 압축 해제해야 했습니다. 압축 파일 세트에는 이름이 중복되어 있습니다(그러나 내용은 서로 다릅니다). 즉, zip1.zip과 zip2.zip에는 모두 "d09483272"라는 동일한 이름의 파일이 포함되어 있습니다.

이렇게 하면 여러 파일의 압축을 풀 수 있지만 unzip \*zip -d $M_DIR내 경우에는 새로 압축을 푼 파일이 이미 $M_DIR 위치에 있는 파일을 덮어쓰게 되므로 비효율적입니다.

타임스탬프로 압축을 풀어보세요. 아래와 같은 이상한 중첩 루프(분명히 작동하지 않습니다)

    for zip in *zip; do
            unzip -l *zip | while read file
            do
                    unzip -p *.zip ${file} > $(date "+%H:%M:%S:%s%N").pdf
            done
    done

이것이 적절한 접근 방식이 아니라면 더 쉬운 방법이 있을까요? 아이디어?

답변1

unzip-manpage를 살펴보십시오 .

 -n     never overwrite existing files.  If a file already exists, skip the extraction
        of that file without prompting.

답변2

시간이 제한되어 있었기 때문에 나는 우아하지 않은 빠른 수정에 돌입했습니다.

    for zip in $T_DIR*zip; do
            unzip $zip -d $M_DIR;
            rename "s/.pdf/$(date "+%s%N").pdf/" ${M_DIR}*;
    done

각 파일은 개별적으로 $T_DIR폴더로 추출된 다음 파일 이름에 나노초 타임스탬프가 추가됩니다. 압축이 풀린 파일의 다음 웨이브가 해당 폴더에 들어가면 $T_DIR더 이상 "중복 이름"이 없습니다. 더 빠르고 향상된 솔루션에 대한 아이디어가 있습니까?

이는 "중복 이름" 파일이 별도의 zip 파일에 존재하는 경고에만 적용됩니다.

관련 정보