디렉터리 내용을 압축할 때 몇 가지 이상한 경고가 나타납니다. 저는 수년 동안 많은 웹 사이트 백업을 위해 명령줄을 사용해 왔고 이와 같은 문제가 발생한 적이 없습니다. (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.html
etc를 보고 호출하여 stat
오류가 발생하고 zip
결과로 "이름 불일치"가 출력된다는 것입니다.
이를 방지하는 일반적인 방법은 .[^.]*
대신 지정 .*
하거나 일치하는 것이므로 *
다음을 실행하는 것입니다.
zip -r -qv test.zip . -x test.log -x test.zip
대신에.