OS X의 tarball에서 ._foo와 같은 파일을 얻는 이유는 무엇입니까?


70

OS X에서 특정 파일을 tar 할 때 :

tar cvf foo.tar foo

._footarball에 추가 파일 을 생성합니다 .

./._foo
foo

Mac 이외의 운영 체제에서 추출한 경우에만 나타납니다. 그러나 ._foo내 파일 시스템에 존재하지 않습니다! 무슨 일이야? 어떻게 제거 할 수 있습니까?


싫어 7-Zip으로 아카이브 내부를 탐색 할 때보기 흉하게 보입니다.
Nathaniel

답변:


79

OS X의 tar는 AppleDouble 형식을 사용하여 확장 된 속성 및 ACL을 저장합니다.

$ touch file1 file2 file3
$ xattr -w key value file1
$ chmod +a 'admin allow delete' file2
$ ls -le@ *
-rw-r--r--@ 1 lauri  staff  0 May 25 07:09 file1
    key 5
-rw-r--r--+ 1 lauri  staff  0 May 25 07:09 file2
 0: group:admin allow delete
-rw-r--r--  1 lauri  staff  0 May 25 07:09 file3
$ tar -cf 1.tar *
$ tar -tf 1.tar
./._file1
file1
./._file2
file2
file3

OS X의 tar는 또한 ._ 멤버를 기본 형식으로 다시 변환하는 방법을 알고 있지만 일반적으로 다른 플랫폼에서 아카이브를 추출 할 때 ._ 파일이 유지됩니다. COPYFILE_DISABLE을 일부 값으로 설정하여 메타 데이터를 포함하지 않도록 tar에 지시 할 수 있습니다.

$ COPYFILE_DISABLE=1 tar -cf 2.tar file*    
$ tar -tf 2.tar
file1
file2
file3
  • 복사 파일 기능은 man copyfile
  • ls -l@확장 된 속성의 키와 크기를 표시하고 ls -leACL을 인쇄합니다
  • xattr -l 확장 된 속성의 키와 값을 나열합니다.
  • xattr -c 모든 확장 된 속성을 지 웁니다 (-d는 단독으로 사용할 수 없습니다)
  • chmod -N ACL을 삭제합니다
  • OS X에서 생성 된 Zip 파일은 __MACOSX 폴더를 사용하여 유사한 메타 데이터를 저장합니다.

확장 된 속성으로 저장된 정보 :

  • 리소스 포크 (리소스 포크는 10.4 이후로 속성이 확장되었습니다)
    • Finder에서 설정 한 사용자 정의 아이콘 및 Icon \ r 파일 이미지
    • PSD 파일의 메타 데이터
    • scpt 파일에 저장된 객체, AppleScript 편집기 윈도우 상태, 스크립트 설명
  • 별명에 대한 정보 (확장 된 속성이 제거되면 별명이 작동하지 않음)
  • 인터넷에서 다운로드 한 파일의 검역 상태 또는 원본 URL
  • 주목 의견
  • TextEdit으로 저장된 파일 인코딩
  • TextMate로 열린 파일의 캐럿 위치
  • 탈지 메모

MacOS X 10.5.8 (Leopard)에는 기본적으로 GNU tar 1.15.1이 있습니다. GNU의 최신 버전은 1.22 (2009 년 3 월)입니다. 다운로드 및 빌드 : MacOS X에서 빌드 할 때 '--xatters'가없는 것으로 보입니다.
Jonathan Leffler

1
이 변수를 전체 시스템으로 내보내는 대신을 사용할 수도 있습니다 env COPYFILE_DISABLE tar -cf archive.tar my_folder/.
Georg Schölly

1
@Cawas, 문제는 그들이 tarball에 나타 났으며, 나는 크로스 플랫폼을 배포하고 Apple 이외의 운영 체제에서는 의미가 없다는 것입니다.
Jesse Beder

1
사실 Jesse 는 다른 OS / 파일 시스템 에는 아무런 의미없습니다 . 그러나 정보가 우리가 할 수 cat또는 type적어도, 안에 뭐가 볼 수 있습니다. 그리고 일반적으로 거기에 수동으로 입력 한 간단한 텍스트입니다. 나는 백업을 위해 그것을 버리지 않을 것이지만, 당신이 무언가를 크로스 플랫폼으로 배포하고 싶거나 특별히 실수로 거기에 있다면 그것을 배포하는 것은 쓰레기 일 수 있습니다. 그것들을 남기는 옵션을 말하는 것만으로도 꽤 유효합니다.
cregox

1
참고로 Leopard의 수출 라인은 Lion에도 적용됩니다.
jjeaton

12

현재 bsdtar 3.0.3 - libarchive 3.0.3(아마도 이전)에 대한 새로운 옵션이있다 bsdtar라고 명령 --disable-copyfile의 생성 억제 ._파일을.

# on Mac OS X
# /usr/bin/tar -> bsdtar
ls -l /usr/bin/tar    

# from man bsdtar
--disable-copyfile
        Mac OS X specific.  Disable the use of copyfile(3).

3
으로 bsdtar 2.8.3 - libarchive 2.8.310.7.5--disable-copyfile그럼에도 불구하고 문서화하지만 사용할 수 없습니다.
Stefan Schmidt


1

._다른 답변에서 언급 한 파일은 리소스 포크입니다. 그러나 다음을 사용할 때 제거하는 더 좋은 방법이 있습니다 tar.

export COPYFILE_DISABLE=true
tar cvf foo.tar foo

dot_clean이러한 파일을 정리 하는 유틸리티 도 있습니다 (일반적으로 외부 저장소에 사용되는 것 같습니다).


감사! 해당 솔루션에 대한 위의 답변 끝을 참조하십시오.
Jesse Beder

tar가 파일을 생성하기 때문에 dot_clean이 작동하지 않습니다
joedevon

0

다음은 해당 파일을 제거하기위한 Python 스크립트입니다. 인기있는 모든 OS에서 작동합니다.

철저히 테스트 하지 않았 으므로 자신의 책임하에 사용하십시오!

import os
import os.path

def dot_clean(folder):
    files = os.listdir(folder)
    for file in files:
        full_name = folder + "/" + file
        if os.path.isdir(full_name):
            dot_clean(full_name)
        elif file.startswith("._"):
            os.remove(full_name)

dot_clean('.')            

1
음, HFS +가있는 OS X를 제외하고 ...
Daniel Beck

왜 안돼? 고치는 방법을 제안 할 수 있습니까?
Aivar

1
파일 시스템은 메타 데이터를 내부적으로 저장할 수 있으므로 이러한 파일은 실제로 HFS +에 존재하지 않습니다. 이러한 파일은 HFS +에서 FAT USB 썸 드라이브로 파일을 전송할 때 파일이 존재하게되고 파일을 다시 전송할 때 사라지는 것을 지원하지 않는 파일 시스템에 대한 해결 방법입니다.
Daniel Beck

-3

마침표 문자 "."는 Mac 플랫폼에서 숨겨진 파일 표시기로 사용됩니다. Windows에서는 "$"문자입니다. 어쨌든 ._foo 파일에는 OS X 관련 정보가 포함되어 있으므로 삭제하지 않는 것이 좋습니다. 다른 시스템에서는이를 무시해야합니다. 그렇지 않으면 여기에서 누군가 "."로 시작하는 파일과 폴더를 숨기는 스크립트를 제공 할 수 있습니다.


모든 사용자 지정 아이콘, 파일을 만든 응용 프로그램 등과 같은 메타 데이터는 모두 메타 데이터입니다. 삭제해도 안전합니다.
dreamlax

그래도 주로 Mac을 사용하는 경우 보관하는 것이 좋습니다. OS X 이상의 Windows를 사용하는 경우 계속 진행하십시오.
dbmikus

(@dreamlax) 확장 된 속성에 저장된 대부분의 데이터는 삭제하기에 안전한 메타 데이터 인 것이 사실이지만 항상 그런 것은 아닙니다. 특히, "리소스 포크"가있는 파일이 HFS에서 파생되지 않은 파일 (FAT, UFS, tar 등)에 저장 될 때 이러한 '._ *'파일은 다른 확장 속성 중에서 데이터를 보유하는 데 사용됩니다. 리소스 포크. 많은 파일 형식이 리소스 포크를 사용하지 않고 (번들쪽으로) 이동하는 동안 중요한 데이터가 리소스 포크에 저장되는 파일이 있습니다 (때로는 리소스 데이터가 유일한 데이터 임).
Chris Johnsen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.