Tar command in mac os x adding “hidden” files, why

2020-05-14 08:27发布

I am writing my own tar archiver. All works fine inside my app (even reading tars generated with other tools) however I cannot get my tar files to work with 3rd party tar file readers. So I tried building a tar file on the command line, building one with my code and binary comparing the two.

But there seems to be an issue:

I have a textfile called Test.txt which I want to add to my tar, so I run the following command in the terminal:

tar -c -f x.tar Test.txt

When doing this:

tar -tf x.tar

I get the following list:

./._Test.txt
Test.txt

This is in the Terminal on Mac OS X Lion.

Where does that ./._Test.txt file come from? I don't see it when doing an ls -a

Upon inspecting the tar contents it seems to be some binary data, but I have no idea where it comes from.

4条回答
一夜七次
2楼-- · 2020-05-14 08:38

It's a representation of the file's resource fork/extended attributes.

Try ls -l@ Test.txt and xattr -l Test.txt to see what extra stuff OSX tacked on to the file.

查看更多
再贱就再见
3楼-- · 2020-05-14 08:51

As of bsdtar 3.0.3 - libarchive 3.0.3 (and perhaps earlier) there's a new (Mac OS X specific) option to the bsdtar command called --disable-copyfile to suppress the creation of ._ files.

查看更多
我命由我不由天
4楼-- · 2020-05-14 08:57

This is the way OSX stores the file system forks when the target file system does not support them.

See: http://en.wikipedia.org/wiki/Fork_(file_system)

查看更多
男人必须洒脱
5楼-- · 2020-05-14 08:59

You can add the following to your bashrc file -

export COPYFILE_DISABLE=true

Or, you can add this option to your tar command at the extraction time

tar -xzpvf x.tar --exclude="._*"
查看更多
登录 后发表回答