다음과 같은 디렉토리 구조가 있습니다.
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