특정 디렉토리(물론 하위 디렉토리도 포함)의 tar 아카이브를 만들고 싶습니다. 하지만 tar 명령을 사용하여 이 작업을 수행하면 다음과 같은 포함된 파일 목록이 표시됩니다.
Calendar_final/._style.css
Calendar_final/style.css
보시다시피, 동일한 파일에는 두 가지 버전이 있습니다. 이는 모든 파일에 적용되며 많은 파일이 있습니다. tar 아카이브에서 ._ 접두사가 있는 임시 파일을 제외하는 방법은 무엇입니까?
답변1
귀하는 귀하의 의견에 Mac OS X 시스템에서 작업하고 있다고 표시했습니다. 이는 이러한 파일의 목적에 대한 중요한 단서입니다 ._*
.
이러한 ._*
아카이브 항목은 큰 덩어리로 구성되어 있습니다.사과 복식해당 파일(접두사가 없는 파일)과 ._
관련된 추가 정보가 포함된 데이터입니다 . Mac OS X에만 해당됩니다.파일 복사(3)함수 계열. AppleDouble blob은 ACL(액세스 제어 데이터) 및 확장 속성(일반적으로발견자플래그 및 "리소스 포크"이지만 xattrs는 모든 유형의 데이터를 저장하는 데 사용할 수 있습니다.
시스템 bsdtar
제공 된OSMactar
gnutar
pax
._*
다른 시스템의 해당 보관 도구는 이러한 파일에 대한 특별한 처리를 알지 못하므로 ._*
해당 파일을 일반 파일로 추출합니다. 이러한 파일은 다른 시스템에서는 전혀 쓸모가 없기 때문에 종종 "정크 파일"로 간주됩니다. 따라서 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-xattrs
MacOS BSD tar 플래그를 사용하여 tarball을 생성합니다.
tar --no-xattrs -c -f <tarfilename> [file list/glob/whatever]