다른 디렉토리에 있는 파일을 압축하기 위해 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
디렉토리를 변경하면 *
확장된 매개변수가 무효화됩니다. tar
zip 디렉토리를 간단히 알 수 있습니다 .
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
//.
이는 경로의 어느 부분을 제거할지 표시 하는 데 사용됩니다 .