숨겨진 파일 및 폴더가 포함된 아카이브를 생성하면 . 루트 항목

숨겨진 파일 및 폴더가 포함된 아카이브를 생성하면 . 루트 항목

숨겨진 파일과 폴더가 있는 프로젝트 폴더를 보관하려고 하는데 루트 항목이 .. 짜증난다. 일반적으로 :

tar -czf $ARCHIVE_NAME -C $DIR .

다음과 같은 아카이브를 생성합니다

./package.json
./.git
./.gitignore
.
.
.

여기서는 항목이 없는 실제 파일과 폴더가 아카이브의 루트가 되도록 하고 싶습니다 .. 좋다

package.json
.git
.gitignore
.
.
.

어떻게 해야 하나요?

* 편집하다 *

아래 이미지는 이 질문을 명확히 하는 데 도움이 될 수 있습니다.

  • 왼쪽은 프로젝트의 GUI 도구를 사용하여 생성된 아카이브(이틀 전)입니다.
  • 오른쪽은 위 tar명령으로 생성된 아카이브입니다.

"위치" 표시줄을 확인하세요. 오른쪽 아카이브는 이어야 하며 /,~ 아니다 /./.

여기에 이미지 설명을 입력하세요

답변1

./현재 디렉토리를 의미합니다. 두 개의 목록이 동일합니다.

./아카이브를 나열할 때 파일 앞에 두면 특별한 이름을 가진 파일을 처리하는 데 도움이 됩니다. 두 번째 도구에서 처리할 수 있도록 파일 이름이 -file표시됩니다 ../-file

답변2

명령 변경

tar -czf $ARCHIVE_NAME -C $DIR .

에게

tar -czf $ARCHIVE_NAME -C $DIR ./*

트릭을 수행해야합니다. 이렇게 하면 "디렉토리를 .아카이브에 추가"라고 말하는 것이 아니라 "디렉토리에 있는 모든 파일을 .아카이브에 추가"라고 말하는 것입니다.

답변3

이 명령은 다음 없이 현재 디렉터리의 파일을 tar합니다 ./.

tar cf /some/tarfile.tar *

물론 마침표로 시작하는 파일 이름은 포함되지 않습니다. 아마도 원하는 바가 아닐 것입니다. 다음과 같은 경우를 포착하기 위해 추가 와일드카드를 추가할 수 있습니다.

tar cf /some/tarfile.tar * .[a-zA-Z]*

그러나 이는 범용 솔루션이 아닙니다. 적절한 와일드카드를 만들 수 있도록 디렉터리에 어떤 파일 이름이 있는지 알아야 합니다.

대부분의 Linux 배포판에서 사용되는 GNU tar에는 표현식을 사용하여 파일 이름을 변환하는 기능이 있습니다 sed. 그러면 ./아카이브를 생성하는 동안 파일에서 이 제거됩니다 .

tar cf /some/tarfile.tar --transform 's,^\./,,' .

결과 아카이브에는 여전히 "."에 대한 항목이 있습니다. 디렉토리 자체.

의 일부 버전은 tar파일에서 tar링할 파일의 이름을 읽을 수 있습니다. 해당 기능을 활용하여 다음을 수행할 수 있습니다.

ls -a | egrep -v '^\.\.?$' | tar cf - -T /dev/stdin

이 파이프라인은 현재 디렉터리에 있는 모든 파일의 목록을 구성하고 ...항목을 제거하고 나머지 이름을 로 파이프합니다 tar. tar는 /dev/stdin(표준 입력) 에서 읽은 파일 이름으로 아카이브를 만듭니다 .

관련 정보