TAR는 어떤 캐릭터를 싫어합니까?

TAR는 어떤 캐릭터를 싫어합니까?

증분 백업을 위해 DVD에 구운 사진 목록을 보관했지만 이상한 상황에 직면했습니다. 파일은 DVD에 구웠는데 tar는 계속 그렇지 않다고 말합니다. 재현 단계는 다음과 같습니다.

mkdir tarbug && cd tarbug
mkdir -p photos/{1,2,3}
touch "photos/1/P06-23-08_15.21[1].jpg"
touch "photos/2/P06.jpg"
touch "photos/3/P01.jpg"

모든 파일 목록을 만듭니다(보통 DVD를 구운 후 목록에 추가합니다).

find photos -type f > list

이제 목록의 파일을 제외하고 디렉토리를 표시하지 않는 새 파일을 제공하십시오.

tar cf - photos -X list | tar tf - | grep -v '/$'

결과:

photos/1/P06-23-08_15.21[1].jpg

파일 목록에 표시되어서는 안 됩니다. 대괄호를 백슬래시로 이스케이프해야 한다는 것을 알았나요? 하지만 내가 어떻게 알 수 있나요? tar가 좋아하지 않거나 다른 목적으로 사용하지 않는 문자 목록이 있습니까?

답변1

맨페이지를 보면 tar다음과 같습니다.

 -X, --exclude-from FILE
       exclude patterns listed in FILE

정보 문서에 자세한 내용이 나와 있습니다.

따라서 list파일 이름이 아닌 패턴 목록이어야 합니다. ㅏ무늬일반적으로 셸 와일드카드 패턴을 나타냅니다. 따라서 적어도 , *] [및 는 ]특별합니다. 그것 {역시 사실일 수 있다 }.

문서에는 --no-wildcards. 그러면 이름이 패턴이 아닌 문자 그대로 일치됩니다. --no-wildcards전에 가야합니다 -X.

[내가 확인한 GNU tar입니다. 다른 tar 구현은 다를 수 있습니다. ]

관련 정보