디렉터리의 tar 아카이브를 생성하시겠습니까(숨겨진 파일 제외)?

디렉터리의 tar 아카이브를 생성하시겠습니까(숨겨진 파일 제외)?

특정 디렉토리(물론 하위 디렉토리도 포함)의 tar 아카이브를 만들고 싶습니다. 하지만 tar 명령을 사용하여 이 작업을 수행하면 다음과 같은 포함된 파일 목록이 표시됩니다.

Calendar_final/._style.css

Calendar_final/style.css

보시다시피, 동일한 파일에는 두 가지 버전이 있습니다. 이는 모든 파일에 적용되며 많은 파일이 있습니다. tar 아카이브에서 ._ 접두사가 있는 임시 파일을 제외하는 방법은 무엇입니까?

답변1

귀하는 귀하의 의견에 Mac OS X 시스템에서 작업하고 있다고 표시했습니다. 이는 이러한 파일의 목적에 대한 중요한 단서입니다 ._*.

이러한 ._*아카이브 항목은 큰 덩어리로 구성되어 있습니다.사과 복식해당 파일(접두사가 없는 파일)과 ._관련된 추가 정보가 포함된 데이터입니다 . Mac OS X에만 해당됩니다.파일 복사(3)함수 계열. AppleDouble blob은 ACL(액세스 제어 데이터) 및 확장 속성(일반적으로발견자플래그 및 "리소스 포크"이지만 xattrs는 모든 유형의 데이터를 저장하는 데 사용할 수 있습니다.

시스템 bsdtar제공 된OSMactargnutarpax._*

다른 시스템의 해당 보관 도구는 이러한 파일에 대한 특별한 처리를 알지 못하므로 ._*해당 파일을 일반 파일로 추출합니다. 이러한 파일은 다른 시스템에서는 전혀 쓸모가 없기 때문에 종종 "정크 파일"로 간주됩니다. 따라서 Mac OS X 이외의 시스템에서 생성된 아카이브에 로 시작하는 일반 파일이 포함되어 있는 경우 ._Mac OS는

그러나 시스템 제공 Mac OS X 아카이버가 다른 Unixy 시스템과 동일하게 작동하도록 만드는 문서화되지 않은(?) 방법이 있습니다. 바로 COPYFILE_DISABLE 환경 변수입니다. 이 변수를 임의의 값으로 설정하면(빈 문자열이라도) 아카이버가 ._*아카이브 파일과 관련된 확장 정보를 나타내기 위해 아카이브 멤버를 생성하는 것을 방지할 수 있습니다. 또한 그 존재는 아카이버가 그러한 아카이브 구성원을 확장된 정보로 해석하려고 시도하는 것을 방지합니다.

COPYFILE_DISABLE=1 tar czf new.tar.gz …
COPYFILE_DISABLE=1 tar xzf unixy.tar.gz …

이런 방식으로 자주 작업하려면 쉘의 초기화 파일에서 이 변수를 설정할 수 있습니다.

# disable special creation/extraction of ._* files by tar, etc. on Mac OS X
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

그런 다음 (확장 정보를 보존/복원하기 위해) 기능을 다시 활성화해야 하는 경우 개별 명령에 대한 변수를 "설정 해제"할 수 있습니다.

(unset COPYFILE_DISABLE; tar czf new-osx.tar.gz …)

Mac OS X 10.4의 아카이버는 다른 환경 변수를 사용하지만 비슷한 작업을 수행합니다. COPY_EXTENDED_ATTRIBUTES_DISABLE

답변2

이것은 작동합니다:

tar zcf calendar.tgz "a calendar_final" --exclude '.*'

답변3

프레데릭 드윗GNU tar(Linux, Cygwin, FreeBSD, OSX 및 기타 시스템용)에서는 작동하지만 NetBSD, OpenBSD 또는 Solaris와 같은 다른 시스템에서는 작동하지 않는 솔루션이 제공됩니다.

POSIX는 명령을 지정하지 않았으며 tar(UNIX 변형 간에 너무 다양했기 때문에) 도입되었습니다.pax대신 명령을 내리세요. 이 옵션은 -w아카이브( -r추출)를 생성하고 -x아카이브 형식을 선택하는 것을 의미합니다. 이 옵션은 -s '!BRE!!'경로가 기본 정규식 BRE와 일치하는 모든 파일을 제외합니다.

pax -w -x ustar -s '!^.*/\..*$!!' calendar_final >calendar_final.tar

답변4

최신 버전은 --no-xattrsMacOS BSD tar 플래그를 사용하여 tarball을 생성합니다.

tar --no-xattrs -c -f <tarfilename> [file list/glob/whatever]

관련 정보