"디렉토리 변경" 옵션과 함께 tar 와일드카드를 작동시키는 방법

"디렉토리 변경" 옵션과 함께 tar 와일드카드를 작동시키는 방법

다음과 같은 디렉토리 구조가 있습니다.

base/
   files/
   archives/
   scripts/

나는 scripts/일치하는 파일을 .gzip 압축 tar 아카이브 results.*.log로 압축하기 위해 실행할 수 있는 스크립트를 원합니다 .files/archives/

다음 명령을 시도하고 있습니다.

tar czfC ../archives/archive.tar.gz ../files results.*.log

하지만 난 이해해

tar: results.*.log: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

하지만

tar czfC ../archives/archive.tar.gz ../files results.a.log

예상대로 작동합니다. 반품

tar czf ../archives/archive.tar.gz ../files/results.*.log

파일에 접두어를 추가 files/하고 경고를 발행하는 것을 제외하고는 내가 원하는 방식으로 작동합니다.

tar: Removing leading `../' from member names

그래서 내 결론은 tar해당 옵션을 사용할 때 와일드카드가 제대로 작동하지 않는다는 것입니다 -C. 이 작업을 간단한 방법으로 수행하는 방법에 대한 제안이 있으십니까?

답변1

보다 이식 가능한 방식으로 작성하려면 다음을 수행하십시오.

(cd ../files && tar cf - results.*.log) | 
  gzip -9 > ../archives/archive.tar.gz

답변2

"tar 와일드카드"는 없으며 와일드카드는 쉘에서 수행됩니다. 쉘은 tar -C somedir작업이 어디서 완료될지 알지 못하며 somedir, 모든 glob은 현재 디렉토리에서 확장됩니다.

답변3

드디어 사용했어요

tar czfC ../archives/archive.tar.gz ../files `find ../files/results.*.log -printf "%f\n"`

답변4

이를 수행하는 방법은 다음과 같이 작성하는 것입니다.

#!/bin/sh

cd ../files
tar zcf ../archives/archive.tar.gz results.*.log
cd ../scripts

관련 정보