Zipアーカイブ(-j -r
フラグを付けてスクリプトで自動的に作成される)があり、そこから単一のファイルを削除したいのですが。文書化されたように私は試みました。
Zip -d "picture_43_9.jpg" gallery.Zip
しかし、私はこのエラーが出ます:
Zip warning: picture_43_9.jpg not found or empty
Zip error: Nothing to do! (picture_43_9.jpg)
とにかく、はアーカイブの中にのようなファイルがあり、空ではありません。
unzip -l .../gallery.Zip | grep -i 43_9.jpg
1477092 2013-05-22 14:23 picture_43_9.jpg
何がおかしいのですか?
引数が入れ替わっています。これを試して:
Zip -d gallery.Zip "picture_43_9.jpg"
Zip(1) のマニュアルページから:
-d
--delete
Zipアーカイブからエントリを削除(削除)します。例えば:
Zip -d foo foo/tom/junk foo/harry/\* \*.o
エントリ
foo/tom/junk
、foo/harry/
で始まるすべてのファイル、および.o
で終わるすべてのファイルが(任意のパスで)削除されます。シェルのパス名展開はバックスラッシュで禁止されているため、Zipにアスタリスクが表示され、Zipが有効になります。現在のディレクトリの内容ではなく、Zipアーカイブの内容に一致します。 (円記号はMSDOSベースのプラットフォームでは使用されません。)また、引用符を使用してアスタリスクをエスケープすることもできます。
Zip -d foo foo/tom/junk "foo/harry/*" "*.o"
シェルがワイルドカードを展開するシステムでアスタリスクをエスケープしないと、アスタリスクが現在のディレクトリ内のファイルのリストに変換され、そのリストがアーカイブからエントリを削除するために使用される可能性があります。
MSDOSでは、Zipアーカイブ内の名前と一致する場合、 - dは大文字と小文字が区別されます。 MSDOSシステムでPKZIPで圧縮されている場合は、ファイル名を大文字で入力する必要があります。 (パスが大文字と小文字を区別しないシステムでは、この大文字と小文字を区別しないことを検討しましたが、大文字と小文字が区別されるシステムからアーカイブを取得し、アーカイブに
Bar
とbar
をアーカイブ内の個別のファイルとして使用します。ただし、アーカイブ内の大文字と小文字の区別を無視するには、新しいオプション - icを参照してください。