web-dev-qa-db-ja.com

zipコマンドが機能しない

シェルスクリプトコマンドを使用してファイルを圧縮しようとしています。私は次のコマンドを使用しています:

  Zip ./test/step1.Zip $FILES

$ FILESにはすべての入力ファイルが含まれます。しかし、次のような警告が表示されます

    Zip warning: name not matched: myfile.dat

そしてもう1つ、フォルダ内のファイルのリストにあるファイルに上記の警告が表示され、そのファイルが圧縮されないことがわかりました。

なぜこれが起こっているのか誰かが私に説明できますか?シェルスクリプトの世界は初めてです。

15
Aparna Savant

Zip警告:名前が一致しません:myfile.dat

これは、ファイルmyfile.datが存在しないことを意味します。

ファイルが存在しないファイルを指すシンボリックリンクである場合も、同じエラーが発生します。

あなたが言うように、$FILESの最後のファイルが何であっても、警告とともにZipに追加されません。 $FILESの作成方法に問題があると思います。おそらく、最後のファイル名の最後に改行、キャリッジリターン、スペース、タブ、またはその他の非表示の文字があり、存在しないものになっている可能性があります。たとえばこれを試してください:

for f in $FILES; do echo :$f:; done

私は最後の行が間違っていると思います、例えば:

:myfile.dat :

...または最後の:myfile.dat:の前に文字がない:の代わりに

[〜#〜]更新[〜#〜]

dos2unixを実行した後にスクリプトが機能し始めたと言うと、それは誰もがすでに疑っていたことを裏付けるもので、$FILESリストの最後にキャリッジリターンがあったことがわかります。

od -cは、\ rキャリッジリターンを示します。 echo $FILES | od -cをお試しください

10
janos

Zip warning: name not matched:エラーを生成する可能性のあるもう1つの原因は、Zipの環境変数が正しく設定されていないことです。

Manページから:

ENVIRONMENT
    The following environment variables are read and used by Zip as described.

ZIPOPT
    contains default options that will be used when running Zip.  The contents of this environment variable will get added to the command line just after the Zip command.

Zip
    [Not on RISC OS and VMS] see ZIPOPT

Zip$Options
    [RISC OS] see ZIPOPT

Zip$Exts
    [RISC OS] contains extensions separated by a : that will cause native filenames with one of the specified extensions to be added to the Zip file with basename and extension swapped.

Zip_OPTS
    [VMS] see ZIPOPT

私の場合、スクリプトでZipを使用していて、バイナリ変数の場所を環境変数Zipに入れて、トーンを作成せずに別のZipバイナリに簡単に変更できるようにしましたスクリプトの変更の。

例:

Zip=/usr/bin/Zip
...
${Zip} -r folder.Zip folder

これは次のように処理されます:

/usr/bin/Zip /usr/bin/Zip -r folder.Zip folder

そしてエラーを生成します:

Zip warning: name not matched: folder.Zip
zip I/O error: Operation not permitted
Zip error: Could not create output file (/usr/bin/Zip.zip)

1つ目は、アーカイブとして使用するのではなく、アーカイブにfolder.Zipを追加しようとしているためです。 2つ目と3つ目は、/usr/bin/Zip.zipファイルをアーカイブとして使用しようとしているためです。

:これは本当に古い質問ですが、この回答はどこにも見つからなかったため、将来の検索者(私の将来の自己を含む)を助けるために投稿します。

3
Dave Wood

eebbesen 自分のケースのコメントに釘を打つ(ただし、コメントには投票できない)。他のコメントで見逃されているもう1つの理由として、ファイルがファイルサイズの制限(4GB)を超えていることが考えられます。

1
chukko

これについて別の潜在的な原因を発見しました。ディレクトリ/サブディレクトリのアクセス許可でZipがファイルを見つけられない場合、このエラーが報告されます。実際、ディレクトリでchmod -R 444を実行してからそれをZipしようとすると、このエラーが再現され、次のような「stored 0%」レポートが表示されます。

Zip警告:名前が一致しません:borrar/enviar追加:borrar /(0%保存)

したがって、ファイルの権限を変更してみてください。メールでそれらを送信しようとしていて、それらのメールフィルター(Gmailなど)が実行可能ファイルを送信しないというばかげたフィルターを発明している場合は、Zip圧縮を行うときにアクセス許可を非常に厳密にすることが、報告しているエラーの原因になる可能性があることを忘れないでください。 「名前が一致しません」の.

0
David L

スペースは使用できません:

$ FILESに複数のファイルがある場合は、ループに入れない限り失敗します。

0
Mr.T

Dos2unixコマンドを使用してUNIX環境用にスクリプトを変換し、bash myscript.shではなく./myscript.shとしてスクリプトを実行しました。

0
Aparna Savant