ディレクトリの内容を圧縮すると、いくつかの奇妙な警告が表示されます。私は長年にわたって多くの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.html
etcを見て呼び出してstat
エラーが発生し、zip
結果として「名前の不一致」が出力されることです。
これを防ぐ一般的な方法は、代わりに.[^.]*
指定または.*
一致することであるため、*
次を実行することです。
zip -r -qv test.zip . -x test.log -x test.zip
代わりに。