1

У меня около 800 почтовых файлов. Я следую за этим вопросом, чтобы удалить файл внутри каждого файла. Как удалить несколько файлов внутри нескольких файлов Zip?

Я старался

find /myfolder -iname '*.zip' -print0|xargs -0 -i zip -d photo1.jpg

Но он возвращается с ошибкой

xargs: zip: No such file or directory

Я уверен, что я положил файлы в правильном каталоге. Кто-нибудь может мне с этим помочь?

Очень ценю ваш ответ. Спасибо,

2 ответа2

0

Пытаться:

find /myfolder -iname '*.zip' -exec zip -d {} photo1.jpg \;

Заметки:

  1. Общий -print0/xargs хорош, но опция find -exec устраняет необходимость в конвейере.

  2. Имя zip-файла должно быть перед именем удаляемого файла.

Если вы предпочитаете конвейер, попробуйте:

find /myfolder -iname '*.zip' -print0 | xargs -0 -i zip -d {} photo1.jpg

Или, так как -i устарела:

find /myfolder -iname '*.zip' -print0 | xargs -0 -I{} zip -d {} photo1.jpg

Удаление файлов из подкаталогов zip

Приведенные выше команды будут удалять photo1.jpg только в том случае, если он находится в корневом каталоге zip-файла. Чтобы удалить photo1.jpg из всех подкаталогов внутри zip:

find /myfolder -iname '*.zip' -print0 | xargs -0 -I{} zip -d {} '*/photo1.jpg'

Заметки:

  1. Для получения надежных результатов при использовании подстановочного знака, такого как * , важно поместить имя файла в кавычки, чтобы глобус передавался непосредственно в zip. В противном случае существует риск, что оболочка может найти совпадение и выполнить расширение пути до того, как имя будет передано zip .

  2. Существует большая разница между /*photo1.jpg и */photo1.jpg . Первый приведет к удалению всех файлов, имена которых заканчиваются на photo1.jpg . Это включает в себя имена файлов, такие как abcphoto1.jpg . Последний будет удалять только файлы с именем photo1.jpg .

0

Я нашел окончательное решение этой проблемы. Команда ниже удалит весь файл в zip и все его подкаталоги с определенным именем файла.

find /myfolder -iname '*.zip' -print0 | xargs -0 -i zip -d {} /*photo1.jpg

Просто добавьте /* перед именем файла, чтобы удалить определенный файл, или /*.extension чтобы удалить все файлы с таким расширением.

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