zipコマンドは、私の作業ディレクトリの外部にあるシンボリックリンクに対して存在しない宛先を指す「名前の不一致」警告を表示します。

zipコマンドは、私の作業ディレクトリの外部にあるシンボリックリンクに対して存在しない宛先を指す「名前の不一致」警告を表示します。

ディレクトリの内容を圧縮すると、いくつかの奇妙な警告が表示されます。私は長年にわたって多くのWebサイトのバックアップにコマンドラインを使用してきましたが、このような問題が発生したことはありません。 (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を作成してみましたが、その中にテキストファイルが2つだけ作成されました。新しいディレクトリに配置したのと同じ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

ここでは2つのことが起こっています。

最初は

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

あなたのケースを含む*sumに一致するすべての項目を一覧表示するためにシェルに展開されます。.*..

2つ目は、zip再帰を要求すると除外されたパターンをフィルタリングする前に提供されたすべてのファイル名を解決するため、../logs/michael.muryn.name/http.2810216.bak/html/daily.htmletcを見て呼び出してstatエラーが発生し、zip結果として「名前の不一致」が出力されることです。

これを防ぐ一般的な方法は、代わりに.[^.]*指定または.*一致することであるため、*次を実行することです。

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

代わりに。

関連情報