A word about "compatibility" with other jdk tools...
jar is a specific tool. It was initially conceived to be user-friendly
with users that are already familiar with tar tool:
"The syntax for the jar command resembles the syntax for the tar command."
Mixing-in behaviors not consistent with tar will make it a strange
hybrid. Trying to find common ground with other JDK tools will make it
less flexible.
Regards, Peter
On 29/06/2021 09:05, Peter Levart wrote:
Hi,
On 29/03/2021 12:46, Jaikiran Pai wrote:
Given the support of -C/-dir is new and -P is there for backwards
compatibility then I see the choices are:
* Issue an error when -P and -C/-dir are specified together with -x
* Silently ignore the -P option
* Ignore -C/-dir and the behavior is if -xfP was specified.
I am leaning towards an error given this is a new feature when -P
and -C/-dir are specified with -x
That sounds reasonable to me. I'll update the PR accordingly to take
this into account.
-Jaikiran
If we are trying to follow the semantics of tar -C option (gnutar and
other Unix tar(s)) then I think -P may be combined with -C when
extracting. The manpage for gnutar says:
-C, --directory=DIR
Change to DIR before performing any operations. This
option is order-sensitive, i.e. it affects all options that follow.
...the meaning is that relative paths from archive get extracted
relative to current dir (possibly modified by -C) and that absolute
paths get extracted to their absolute positions (i.e. not affected by
current dir). The -C option (as implemented by tar) is also useful
when gathering files/dirs from different base paths into common
archive structure. Say you have the following (relative)
directory/file structure:
dir1/subdir1/a.txt
dir1/subdir1/b.txt
dir1/file1.txt
dir2/subdir2/a.txt
dir2/subdir2/b.txt
dir2/file2.txt
The command:
tar -cf archive.tar -C dir1 . -C ../dir2 .
...will create archive.tar with the following content (notice the 2nd
-C option is dependent on the 1st: -C literally changes the current
directory before executing further options):
./
./subdir1/
./subdir1/a.txt
./subdir1/b.txt
./file1.txt
./
./subdir2/
./subdir2/a.txt
./subdir2/b.txt
./file2.txt
When extracting, -C may be used to scatter different relative archive
files/dirs into different base paths. For example, the archive.tar
from above can be extracted into original directory structure with the
following command (empty dir1 and dir2 have to be already present):
tar -xf archive.tar -C dir1 ./file1.txt ./subdir1 -C ../dir2
./file2.txt ./subdir2
So here's a hint about the behavior of multiple -C options: if the
option is -C, it should follow tar -C behavior.
Regards, Peter