15

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

  zip ./test/step1.zip $FILES

ここで、$FILES にはすべての入力ファイルが含まれます。しかし、私は次のように警告を受けています

    zip warning: name not matched: myfile.dat

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

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

4

7 に答える 7

11

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

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

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

あなたが言うように、 of の最後のファイルが何であれ$FILES、それは警告とともに zip に追加されません。だから私はあなたが作成する方法に何か問題があると思います$FILES. 最後のファイル名の末尾に改行、改行、スペース、タブ、またはその他の目に見えない文字が含まれている可能性があり、存在しないものになります。たとえば、これを試してください:

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

最後の行は間違っているに違いありません。たとえば、次のようになります。

:myfile.dat :

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

アップデート

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

od -c\r キャリッジ リターンを示します。試すecho $FILES | od -c

于 2013-12-11T21:05:23.227 に答える
1

eebbesenは、私の場合のコメントで釘を打ちました (ただし、コメントに投票することはできません)。他のコメントで見逃したもう 1 つの考えられる理由は、ファイル サイズの制限 (4GB) を超えているファイルです。

于 2015-04-07T14:42:12.143 に答える
1

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

于 2013-12-11T22:23:37.237 に答える
0

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

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

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

于 2014-09-29T14:56:38.420 に答える
0

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

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

于 2014-04-18T00:21:33.960 に答える