OS X에서 특정 파일을 tar 할 때 :
tar cvf foo.tar foo
._foo
tarball에 추가 파일 을 생성합니다 .
./._foo
foo
Mac 이외의 운영 체제에서 추출한 경우에만 나타납니다. 그러나 ._foo
내 파일 시스템에 존재하지 않습니다! 무슨 일이야? 어떻게 제거 할 수 있습니까?
답변
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 -le
ACL을 인쇄합니다xattr -l
확장 된 속성의 키와 값을 나열합니다.xattr -c
모든 확장 된 속성을 지 웁니다 (-d는 단독으로 사용할 수 없습니다)chmod -N
ACL을 삭제합니다- OS X에서 생성 된 Zip 파일은 __MACOSX 폴더를 사용하여 유사한 메타 데이터를 저장합니다.
확장 된 속성으로 저장된 정보 :
- 리소스 포크 (리소스 포크는 10.4 이후로 속성이 확장되었습니다)
- Finder에서 설정 한 사용자 정의 아이콘 및 Icon \ r 파일 이미지
- PSD 파일의 메타 데이터
- scpt 파일에 저장된 객체, AppleScript 편집기 윈도우 상태, 스크립트 설명
- 별명에 대한 정보 (확장 된 속성이 제거되면 별명이 작동하지 않음)
- 인터넷에서 다운로드 한 파일의 검역 상태 또는 원본 URL
- 주목 의견
- TextEdit으로 저장된 파일 인코딩
- TextMate로 열린 파일의 캐럿 위치
- 탈지 메모
답변
현재 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).
답변
._
다른 답변에서 언급 한 파일은 리소스 포크입니다. 그러나 다음을 사용할 때 제거하는 더 좋은 방법이 있습니다 tar
.
export COPYFILE_DISABLE=true
tar cvf foo.tar foo
dot_clean
이러한 파일을 정리 하는 유틸리티 도 있습니다 (일반적으로 외부 저장소에 사용되는 것 같습니다).
답변
다음은 해당 파일을 제거하기위한 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('.')
답변
마침표 문자 “.”는 Mac 플랫폼에서 숨겨진 파일 표시기로 사용됩니다. Windows에서는 “$”문자입니다. 어쨌든 ._foo 파일에는 OS X 관련 정보가 포함되어 있으므로 삭제하지 않는 것이 좋습니다. 다른 시스템에서는이를 무시해야합니다. 그렇지 않으면 여기에서 누군가 “.”로 시작하는 파일과 폴더를 숨기는 스크립트를 제공 할 수 있습니다.