シェルスクリプトコマンドを使用してファイルを圧縮しようとしています。私は次のコマンドを使用しています:
Zip ./test/step1.Zip $FILES
$ FILESにはすべての入力ファイルが含まれます。しかし、次のような警告が表示されます
Zip warning: name not matched: myfile.dat
そしてもう1つ、フォルダ内のファイルのリストにあるファイルに上記の警告が表示され、そのファイルが圧縮されないことがわかりました。
なぜこれが起こっているのか誰かが私に説明できますか?シェルスクリプトの世界は初めてです。
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
をお試しください
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
ファイルをアーカイブとして使用しようとしているためです。
注:これは本当に古い質問ですが、この回答はどこにも見つからなかったため、将来の検索者(私の将来の自己を含む)を助けるために投稿します。
eebbesen 自分のケースのコメントに釘を打つ(ただし、コメントには投票できない)。他のコメントで見逃されているもう1つの理由として、ファイルがファイルサイズの制限(4GB)を超えていることが考えられます。
これについて別の潜在的な原因を発見しました。ディレクトリ/サブディレクトリのアクセス許可でZipがファイルを見つけられない場合、このエラーが報告されます。実際、ディレクトリでchmod -R 444を実行してからそれをZipしようとすると、このエラーが再現され、次のような「stored 0%」レポートが表示されます。
Zip警告:名前が一致しません:borrar/enviar追加:borrar /(0%保存)
したがって、ファイルの権限を変更してみてください。メールでそれらを送信しようとしていて、それらのメールフィルター(Gmailなど)が実行可能ファイルを送信しないというばかげたフィルターを発明している場合は、Zip圧縮を行うときにアクセス許可を非常に厳密にすることが、報告しているエラーの原因になる可能性があることを忘れないでください。 「名前が一致しません」の.
スペースは使用できません:
$ FILESに複数のファイルがある場合は、ループに入れない限り失敗します。
Dos2unixコマンドを使用してUNIX環境用にスクリプトを変換し、bash myscript.shではなく./myscript.shとしてスクリプトを実行しました。