Tar: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(20 intermediate revisions by the same user not shown)
Line 2: Line 2:


* [[Linux#Commands|Linux]]
* [[Linux#Commands|Linux]]
=Overview=
<syntaxhighlight lang='bash'>
tar -cvf <archive-name> <files>
</syntaxhighlight>
<syntaxhighlight lang='bash'>
tar -xf <archive-name>
</syntaxhighlight>
It is important that <archive-name> follows immediately after -f.
=Handling Symbolic Links=
{{External|https://www.gnu.org/software/tar/manual/html_node/dereference.html}}
By default, tar handles archiving symbolic links by writing a block to the archive with the name of the target of the link, thus preserving the symbolic link. However, if the [[#-h.7C--dereference|-h|--dereference]] option is used when creating the archive, tar archives the content of the file the symbolic link points to instead of the symbolic link information.
To create a portable archive aimed at systems that do not support symbolic links, use [[#-h.7C--dereference|-h|--dereference]].
=Handling Hard Links=
{{External|https://www.gnu.org/software/tar/manual/html_node/hard-links.html}}


=Options=
=Options=
Line 16: Line 38:


Preserve order (same order). Sort names to extract to match archive.
Preserve order (same order). Sort names to extract to match archive.
===-z===
Compress, produce a tgz.archive.
===-C===
Source directory when creating the archive. Target directory when extracting the archive.
For
<syntaxhighlight lang='text'>
/
└── home
      └── someuser
            └── A
                ├── X
                ├── Y
                └── Z
                    └── somefile.txt
</syntaxhighlight>
<syntaxhighlight lang='bash'>
tar -cvf test.tar -C /home/someuser/A Z
</syntaxhighlight>
will produce a test.tar that contains:
<syntaxhighlight lang='text'>
Z
└── somefile.txt
</syntaxhighlight>
===-h|--dereference===
See [[#Handling_Symbolic_Links|Handling Symbolic Links]] above.


=Archive=
=Archive=


Archive maintaining the user IDs and file permissions:
Archive maintaining the user IDs and file permissions:
tar -cvspf .../archive.tar *
Note that the name of the archive file to be created must ''immediately'' follow -f, without any interceding parameters.
To also gzip:
tar cfv - ./mydir | gzip > mydir.tgz
==Exclude Specific Files from Archive==
tar cf <''file-name''.tar> --exclude <''pattern''>  <''dir''>
Do not process files or directories that match the specified pattern.  Note that exclusions take precedence over patterns or filenames specified on the command line.
Example:
tar cfv module.tar --exclude */Jenkinsfile --exclude */jenkins module/
=Restoration=
Restore preserving the user ID and file permissions (if done as root, the behavior is implicit):
tar -xvspf .../archive.tar
=Extract a Specified File=
tar -xf archive.tar some/specific/file.txt
gunzip < ... | tar xfv - some/specific/file.txt
=Troubleshooting=
With some versions of <code>tar</code> I get this:
<syntaxhighlight lang='text'>
tar -xfz /.../a.tar.gz -C /usr/lib/jvm/
tar: z: Cannot open: No such file or directory
</syntaxhighlight>
The problem goes away if I don't use "-".

Latest revision as of 00:04, 26 June 2021

Internal

Overview

tar -cvf <archive-name> <files>
tar -xf <archive-name>

It is important that <archive-name> follows immediately after -f.

Handling Symbolic Links

https://www.gnu.org/software/tar/manual/html_node/dereference.html

By default, tar handles archiving symbolic links by writing a block to the archive with the name of the target of the link, thus preserving the symbolic link. However, if the -h|--dereference option is used when creating the archive, tar archives the content of the file the symbolic link points to instead of the symbolic link information.

To create a portable archive aimed at systems that do not support symbolic links, use -h|--dereference.

Handling Hard Links

https://www.gnu.org/software/tar/manual/html_node/hard-links.html

Options

Archival

When tar is executed as root, the file permissions and owner are preserved.

-p

Preserve permissions, default when the root executes the command.

-s

Preserve order (same order). Sort names to extract to match archive.

-z

Compress, produce a tgz.archive.

-C

Source directory when creating the archive. Target directory when extracting the archive.

For

/
└── home
      └── someuser
             └── A
                 ├── X
                 ├── Y
                 └── Z
                     └── somefile.txt
tar -cvf test.tar -C /home/someuser/A Z

will produce a test.tar that contains:

 Z
 └── somefile.txt

-h|--dereference

See Handling Symbolic Links above.

Archive

Archive maintaining the user IDs and file permissions:

tar -cvspf .../archive.tar *

Note that the name of the archive file to be created must immediately follow -f, without any interceding parameters.

To also gzip:

tar cfv - ./mydir | gzip > mydir.tgz

Exclude Specific Files from Archive

tar cf <file-name.tar> --exclude <pattern>  <dir>

Do not process files or directories that match the specified pattern. Note that exclusions take precedence over patterns or filenames specified on the command line.

Example:

tar cfv module.tar --exclude */Jenkinsfile --exclude */jenkins module/

Restoration

Restore preserving the user ID and file permissions (if done as root, the behavior is implicit):

tar -xvspf .../archive.tar

Extract a Specified File

tar -xf archive.tar some/specific/file.txt

gunzip < ... | tar xfv - some/specific/file.txt

Troubleshooting

With some versions of tar I get this:

tar -xfz /.../a.tar.gz -C /usr/lib/jvm/
tar: z: Cannot open: No such file or directory

The problem goes away if I don't use "-".