pixz icon indicating copy to clipboard operation
pixz copied to clipboard

pixz -l doesn't display files and folders that start with "._"

Open dizi42 opened this issue 12 years ago • 2 comments

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.

dizi42 avatar Dec 12 '13 18:12 dizi42

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?

vasi avatar Dec 14 '13 01:12 vasi

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.

dizi42 avatar Dec 14 '13 03:12 dizi42