zip 명령은 내 작업 디렉터리 외부의 심볼릭 링크에 대해 존재하지 않는 대상을 가리키는 "이름 불일치" 경고를 표시합니다.

zip 명령은 내 작업 디렉터리 외부의 심볼릭 링크에 대해 존재하지 않는 대상을 가리키는 "이름 불일치" 경고를 표시합니다.

디렉터리 내용을 압축할 때 몇 가지 이상한 경고가 나타납니다. 저는 수년 동안 많은 웹 사이트 백업을 위해 명령줄을 사용해 왔고 이와 같은 문제가 발생한 적이 없습니다. (zip 파일이 올바르게 생성된 것처럼 보이지만) 경고가 나타나는 이유를 알아내려고 노력하고 있지만 합리적인 시간 내에 작동하도록 할 수 없습니다(내가 발견한 내용을 정리하고 계속 읽으십시오).

zip 파일로 백업하려는 디렉터리로 이동합니다.

cd /home/mickoz/michael.muryn.name

내가 실행한 명령은 다음과 같습니다(문제를 디버깅하고 재현하기 위해 사용자 정의했습니다).

zip -r -qv test.zip * .* -x "..*" -x test.log -x test.zip > test.log

어떤 이유로 처음에는 다음 경고를 기록합니다.

zip warning: name not matched: ../logs/michael.muryn.name/http.2810216.bak/html/daily.html
zip warning: name not matched: ../logs/michael.muryn.name/http.2810216.bak/html/index.html
zip warning: name not matched: ../logs/michael.muryn.name/http.2810216.bak/html/longterm.html
zip warning: name not matched: ../logs/michael.muryn.name/http.2810216.bak/html/monthly.html
zip warning: name not matched: ../logs/michael.muryn.name/http.2810216.bak/html/resources
zip warning: name not matched: ../logs/mickoz.dreamhosters.com/http.2150913.bak/html/index.html
zip warning: name not matched: ../logs/mickoz.dreamhosters.com/http.2150913.bak/html/monthly.html
zip warning: name not matched: ../logs/mickoz.dreamhosters.com/http.2150913.bak/html/resources
zip warning: name not matched: ../logs/muryn.name/http.2810083.bak/html/index.html
zip warning: name not matched: ../logs/muryn.name/http.2810083.bak/html/monthly.html
zip warning: name not matched: ../logs/muryn.name/http.2810083.bak/html/resources
zip warning: name not matched: ../muryn.name/.#svn-commit.tmp

이제 내용을 압축한 디렉터리에는 심볼릭 링크가 없습니다(딥 디렉터리가 존재하는지 알아보기 위해 명령을 실행했지만 존재하지 않았습니다).

도대체 확실하게 하기 위해 새 디렉터리 /home/mickoz/michael.muryn.name2를 만들어 보았지만 그 안에 텍스트 파일이 두 개만 생성되었습니다. 새 디렉토리에 배치한 것과 동일한 zip 명령을 실행하면...완전히 동일한 경고가 표시됩니다! 디렉토리 외부를 검색하려는 것 같지만 작업을 수행해야 하는 zip 명령에서 "..*"를 제외했기 때문에 이유를 이해할 수 없습니다.

디렉토리 이름의 점이 문제를 일으키고 동일한 결과를 얻는 경우를 대비하여 /home/mickoz/testzipbackup이라는 디렉토리에서 이 작업을 시도했습니다.

이 문제의 원인이 무엇인지 아시나요? 어떻게 디버깅할 수 있나요?


추가 정보:

거기에 심볼릭 링크가 있습니다

/home/mickoz/muryn.name/.#svn-commit.tmp -> [email protected]

심볼릭 링크는 존재하지 않는 것을 가리킵니다. 점점 더 디버깅을 할수록 이것이 중요한 것 같습니다.

이를 삭제하고 test zip 명령을 다시 실행했는데 다음 줄이 로그에서 사라졌습니다.

zip warning: name not matched: ../muryn.name/.#svn-commit.tmp

따라서 어떤 이유에서인지 디렉토리 외부 검색을 시도하고 있지만 파일을 올바르게 제외하는 것처럼 보이면서도 심볼릭 링크처럼 보이는 것만 검색하는 이유를 이해할 수 없습니다.


거기에서 나는 내 홈 디렉터리의 루트에서 다음 명령을 사용하여 더 깊이 파고들어 내 사용자 계정의 모든 심볼릭 링크를 검색했습니다.

find . -type l -ls

구체적이고 흥미로운 결과의 예는 다음과 같습니다.

14575211295    0 lrwxrwxrwx   1 root     root           49 Aug  6  2011 ./logs/muryn.name/http.2810083 -> /home/_domain_logs/mickoz/muryn.name/http.2810083
14145610800    0 lrwxrwxrwx   1 root     root           21 Aug  6  2011 ./logs/muryn.name/http.2810083.bak/access.log.0 -> access.log.2011-08-05
14145612338    0 lrwxrwxrwx   1 root     root           20 Aug  6  2011 ./logs/muryn.name/http.2810083.bak/error.log.0 -> error.log.2011-08-05
15649147256    0 lrwxrwxrwx   1 root     root           67 Aug  5  2011 ./logs/muryn.name/http.2810083.bak/html/daily.html -> /home/mickoz/logs/muryn.name/http.2810083/html/inactive_report.html
15649147257    0 lrwxrwxrwx   1 root     root           73 Aug  5  2011 ./logs/muryn.name/http.2810083.bak/html/index.html -> /home/mickoz/logs/muryn.name/http.2810083/html/monthly/2011-08/index.html
15649147258    0 lrwxrwxrwx   1 root     root           66 Aug  5  2011 ./logs/muryn.name/http.2810083.bak/html/longterm.html -> /home/mickoz/logs/muryn.name/http.2810083/html/longterm/index.html
15649147259    0 lrwxrwxrwx   1 root     root           73 Aug  5  2011 ./logs/muryn.name/http.2810083.bak/html/monthly.html -> /home/mickoz/logs/muryn.name/http.2810083/html/monthly/2011-08/index.html
15649147260    0 lrwxrwxrwx   1 root     root           27 Oct 19  2009 ./logs/muryn.name/http.2810083.bak/html/resources -> /home/mickoz/logs/resources
14557793344    0 lrwxrwxrwx   1 root     root           49 Mar 19 15:12 ./logs/muryn.name/http -> /home/_domain_logs/mickoz/muryn.name/http.2810083

나는 이것을 분석한 결과 존재하지 않는 대상을 가리키는 심볼릭 링크만 내 zip 명령 경고에 나타나는 것을 발견했습니다.

지금은 zip 명령이 작업 디렉터리 외부에서 이러한 심볼릭 링크를 찾고 존재하지 않는 대상을 가리키는 심볼릭 링크에서만 실행/경고하는 이유를 이해하는 것입니다.

답변1

여기서는 두 가지 일이 일어나고 있습니다.

첫 번째는

zip -r -qv test.zip * .* -x "..*" -x test.log -x test.zip

귀하의 사례 를 포함하여 *sum 과 일치하는 모든 항목을 나열하기 위해 셸로 확장됩니다 ..*..

두 번째는 zip재귀를 요청하면 제외된 패턴을 필터링하기 전에 제공된 모든 파일 이름을 확인하므로 ../logs/michael.muryn.name/http.2810216.bak/html/daily.htmletc를 보고 호출하여 stat오류가 발생하고 zip결과로 "이름 불일치"가 출력된다는 것입니다.

이를 방지하는 일반적인 방법은 .[^.]*대신 지정 .*하거나 일치하는 것이므로 *다음을 실행하는 것입니다.

zip -r -qv test.zip . -x test.log -x test.zip

대신에.

관련 정보