pixz -l doesn't display files and folders that start with "._"
I'm creating .tar.xz files using pixz and when I list the tarball contents using pixz -l, it doesn't show files and folders that start with "._" (without quotes).
Here's an example.
$ tar -Ipixz -tf test_folder.tar.xz
test_folder.sha512sum
test_folder/
test_folder/regular_file_1
test_folder/._hidden_file_0
test_folder/.hidden_file_1
test_folder/._hidden_folder_0/
test_folder/._hidden_folder_0/file.ext
test_folder/.hidden_folder_1/
test_folder/.hidden_folder_1/file.ext
test_folder/_regular_file_0
pixz -l test_folder.tar.xz
test_folder.sha512sum
test_folder/
test_folder/regular_file_1
test_folder/.hidden_file_1
test_folder/._hidden_folder_0/file.ext
test_folder/.hidden_folder_1/
test_folder/.hidden_folder_1/file.ext
test_folder/_regular_file_0
The missing file and folder are:
test_folder/._hidden_file_0
test_folder/._hidden_folder_0/
I'm using the current master branch.
So this actually happens on archive creation, not on listing. Here's why:
OS X has a bunch of special file attributes like resource forks and Finder Info, that aren't easily tar-able. So bsdtar (the default on OS X) uses the copyfile() API to grab that extra data in AppleDouble format, and stores it as a ._ file. Eg, if you have a file called "foo" with a resource fork, bsdtar will store a "._foo" member and then "foo".
This is pretty annoying for pixz! Listing the tarball would include all sorts of extra ._ files, and extracting a single file would strip it of its special attributes. So I chose the solution of treating a ._ file as part of the following file, which works in almost all cases. Obviously it's not perfect though, such as if you really have files starting with ._ .
Here are some potential solutions:
- Have a flag to enable/disable the special ._ handling
- Automatically disable ._ handling on non-Mac platforms
- Always store ._ files, but then use special code for listing/extraction to ignore it.
Do you have a preference among them? Why do you have ._ files lying around, anyhow?
Thanks for the info. I didn't know OS X did that. That makes sense. I share files with people who use Windows, OS X and Linux. It looks like all the files not being listed are from folders that have been extracted and re-archived through an Apple PC at some point. Also, I haven't intentionally named anything that starts with ._.
I guess these files are useless on PCs not running OS X. As for a preference then I'd like a flag. You can leave the the current behavior as the default.