65

У меня есть 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 

Есть идеи, что я делаю не так?

1 ответ1

87

У вас есть аргументы поменялись местами. Попробуй это:

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 -d чувствительна к регистру, когда совпадает с именами в zip- архиве. Для этого необходимо, чтобы имена файлов вводились в верхнем регистре, если они были заархивированы PKZIP в системе MSDOS. (Мы решили сделать этот регистр нечувствительным в системах, в которых пути были нечувствительны к регистру, но возможно, что архив поступил из системы, в которой регистр имеет значение, и архив может включать в себя как Bar и bar как отдельные файлы в архиве.) Но посмотрите новую опцию -ic, чтобы игнорировать регистр в архиве.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .