Search code examples
bashunzip

Access to zipped files without unzipping them


I have a zip file that contains a tar.gz file. I would like to access the content of the tar.gz file but without unzipping it

I could list the files in the zip file but of course when trying to untar one of those files bash says : "Cannot open: No such file or directory" since the file does not exist

for file in $archiveFiles;
        #do echo ${file: -4};
        do
          if [[ $file == README.* ]]; then
            echo "skipping readme, not relevant"
          elif [[ $file == *.tar.gz ]]; then
            echo "this is a tar.gz, must extract"
            tarArchiveFiles=`tar -tzf $file`
            for tarArchiveFile in $tarArchiveFiles;
                do echo $tarArchiveFile
                done;

          fi
    done;

Is this possible to extract it "on the fly" without storing it temporarily. I have the impression that this is doable in python


Solution

  • You can pipe an individual member of a zip file to stdout with the -p option

    In your code change

    tarArchiveFiles=`tar -tzf $file`
    

    to

    tarArchiveFiles=`unzip -p zipfile $file | tar -tzf -`
    

    replace "zipfile" with the name of the zip archive where you sourced $archiveFiles from