tar unix는 디렉토리를 변경하지 않습니다

tar unix는 디렉토리를 변경하지 않습니다

다른 디렉토리에 있는 파일을 압축하기 위해 tar 명령을 실행하고 있습니다.

다음 명령을 실행했습니다.

tar -czf /backupmnt/abc.tar.gz -C /backupmnt/statusService/ *

디렉토리의 모든 파일을 /backupmnt포함해야 하는 abc.tar.gz 파일을 생성하고 싶지만 다음 오류가 발생합니다./backupmnt/statusService/

tar: components: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

components명령을 실행하는 현재 디렉터리에 존재합니다. 다음은 내용이다/backupmnt/statusService

SS-01:/ # ls /backupmnt/statusService
MJ.netact.xml.tar.gz      gmoTemp_fm.tar.gz  mr.properties.tar.gz  probe.properties.tar.gz  relay_logs.tar.gz  ss_logs.tar.gz  tomcat_conf.tar.gz
esymac_config.txt.tar.gz  gmoTemp_pm.tar.gz  o2ml.tar.gz           probes_logs.tar.gz       ss_conf.tar.gz     ss_pm.tar.gz    tomcat_logs.tar.gz

내가 어디서 잘못되었는지 이해가 안 돼요.

답변1

*tar실행 전 셸에 의해 확장됩니다. 따라서 tar디렉토리를 변경하면 *확장된 매개변수가 무효화됩니다. tarzip 디렉토리를 간단히 알 수 있습니다 .

tar -czf /backupmnt/abc.tar.gz -C /backupmnt/statusService/ .

디렉터리가 변경되면 변경되는 .현재 디렉터리를 나타냅니다 . tar이렇게 하면 숨겨진 파일( 로 시작하는 파일 .)이 아카이브에 포함됩니다.

답변2

명시적인 디렉토리 변경을 사용하지 않는 이유는 무엇입니까?

cd /backupmnt/statusService && tar -czf /backupmnt/abc.tar.gz *

또는 상대 경로를 사용할 수 있습니다.

cd /
tar -czf /backupmnt/abc.tar.gz backupmnt/statusService1/* backupmnt/statusService2/* backupmnt/statusService3/*

폴더의 파일을 분리하고 중복된 파일 이름을 덮어쓰는 것을 방지할 수 있으므로 이것이 더 나은 솔루션일 수 있습니다.

답변3

-C어떤 수단으로도 휴대용 옵션이 아닙니다. 이는 UNIX 옵션이 아닌 GNU 옵션입니다.

tar그럼에도 불구하고 구현이 매우 다양하기 때문에 단일 UNIX 사양은 더 이상 지정되지 않습니다. pax아카이브를 생성하려면 이식 가능 해야 합니다 .

다음을 수행할 수 있습니다.

pax -ws '|.*//||' /backupmnt/statusService//. /some/other/dir//./*.ext |
  xz > file.tar.xz

(POSIX는 / 를 지정하지 않습니다 xz).gzip

//.이는 경로의 어느 부분을 제거할지 표시 하는 데 사용됩니다 .

관련 정보