
증분 백업을 위해 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 구현은 다를 수 있습니다. ]