linuxunixtar

How do I extract files without folder structure using tar


I have a tar.gz-file with the following structure:

folder1/img.gif
folder2/img2.gif
folder3/img3.gif

I want to extract the image files without the folder hierarchy so the extracted result looks like:

/img.gif
/img2.gif
/img3.gif

I need to do this with a combination of Unix and PHP. Here is what I have so far, it works to extract them to the specified directory but keeps the folder hierarchy:

exec('gtar --keep-newer-files -xzf images.tgz -C /home/user/public_html/images/',$ret);

Solution

  • You can use the --strip-components option of tar.

     --strip-components count
             (x mode only) Remove the specified number of leading path ele-
             ments.  Pathnames with fewer elements will be silently skipped.
             Note that the pathname is edited after checking inclusion/exclu-
             sion patterns but before security checks.
    

    I create a tar file with a similar structure to yours:

    $tar -tf tarfolder.tar
    tarfolder/
    tarfolder/file.a
    tarfolder/file.b
    
    $ls -la file.*
    ls: file.*: No such file or directory
    

    Then extracted by doing:

    $tar -xf tarfolder.tar --strip-components 1
    $ls -la file.*
    -rw-r--r--  1 ericgorr  wheel  0 Jan 12 12:33 file.a
    -rw-r--r--  1 ericgorr  wheel  0 Jan 12 12:33 file.b