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.3의 10.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.