콘텐츠로 압축되지 않은 파일이 이중 gzip으로 잘못 압축되었습니다.

콘텐츠로 압축되지 않은 파일이 이중 gzip으로 잘못 압축되었습니다.

실수로 두 번 압축된 파일이 있습니다.파일 확장자 없음

예를 들어 gzip -dc file일부 파일은 일부 바이너리 횡설수설을 출력하지만 다른 파일은 괜찮습니다.

폴더에서 이중 gzip 압축 파일을 찾아서(모든 파일이 이중 gzip으로 압축된 것은 아니지만 모든 파일이 적어도 한 번은 있음) 자동으로 단일 gzip 압축 상태로 복원할 수 있는 명령을 실행하고 싶습니다.

답변1

다음을 수행할 수 있습니다.

for file in *; do 
    zcat -- "$file" | 
        file - | 
            grep -wq compressed && 
                gunzip -- "$file"
done

이는 임의의 파일 이름으로 실행할 수 있다는 장점이 있습니다(예:당신의 방법으로 ls, 참조http://mywiki.wooledge.org/ParsingLs) 또한 훨씬 더 단순해 보입니다. 적어도 나에게는 그렇게 보인다.

.gz단점은 확장자가 없는 gzip 파일 로 끝날 수 있다는 것입니다 . 그러나 이것은 쉽게 해결됩니다:

for file in *; do 
    case "$file" in 
        *.gz) ;; 
        *) file -- "$file" | 
            grep -wq compressed && 
                mv -v -- "$file" "$file".gz;; 
    esac
done

답변2

이것은 내가 사용하는 명령입니다:

ls | xargs -L1 -I[] sh -c 'basename "[]" | xargs -L1 -I{} sh -c "cp -a \"[]\" \"/tmp/{}.gz\" && gzip -d \"/tmp/{}.gz\" && file \"/tmp/{}\" | (grep compressed -q && rsync -a \"/tmp/{}\" \"[]\" --remove-source-files) || rm \"/tmp/{}\""'

기본적으로 파일을 복사하여 /tmp/압축을 한 번 풀고, 새 파일이 아직 압축되어 있는지 확인하고( file some_file | grep compressed -q), 그렇다면 원래 위치( )로 다시 이동하고 rsync source dest --remove-source-files, 그렇지 않으면 임시 파일을 삭제합니다.

관련 정보