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

579
Carmageddon

Итак, у меня есть скрипт, который перебирает zip-файлы, перечисляет их содержимое с помощью unzip -l $ filename и ищет совпадения с шаблоном (.*)report.xml, в этом случае возвращает test0\report.xml

Но когда он пытается распаковать unzip -j $filename, я получаюcaution: filename not matched: test0\report.xml

Я остановился и попробовал вручную файл, который перечисляет:

7285 2018-05-04 13:34 test0\report.xml

Затем делать

unzip -j 2747693b-7027-44d3-98f4-a01f1ed139cf.zip test0\report.xml

Дает мне ошибку caution: filename not matched: test0report.xml

Я попытался позвонить, \\чтобы избежать этого, затем та же ошибка, но сказать test0\report.xmlвместо этого.

Я пробовал все, как \, или /, или //, поэтому я не думаю, что это проблема обратной косой черты.

Пожалуйста помоги.

0
Примечание: является ли `unzip -j $ filename` просто примером? если это часть вашего скрипта, сделайте его `unzip -j" $ filename "`. Kamil Maciorowski 5 лет назад 0
ОК Почему? это работало для всех других файлов, которые мне нужно было извлечь из других архивов (они не были в подкаталоге с неправильной косой чертой, howeveR) Carmageddon 5 лет назад 0
Если переменная содержит пробелы и т. Д., Команда получит больше аргументов, чем вы ожидаете, и они не будут нормальными. Если вы уверены, что пробелы не могут произойти, вы можете избежать использования кавычек без кавычек. Тем не менее, это хорошая общая практика, чтобы цитировать. Kamil Maciorowski 5 лет назад 1

1 ответ на вопрос

0
Kamil Maciorowski

Я воссоздал проблему в моем Kubuntu. Имя файла было буквально, test0\report.xmlи когда я сделал

unzip -j foo.zip test0\\report.xml 

unzipвернулся, filename not matched: test0\report.xmlхотя полученная строка должна совпадать, я думаю.

Инструмент поддерживает некоторые шаблоны. Я смог распаковать файл с помощью этой команды:

unzip -j foo.zip 'test0?report.xml' 

Жук? Я предполагаю, что вы должны добавить некоторую логику в ваш скрипт или просто разархивировать вручную всякий раз, когда такая (надеюсь, редкая) ситуация повторяется. Или воспользуйтесь этими подстановочными знаками, поддерживаемыми сценарием, unzipи вместо сопоставления (.*)report.xmlв скрипте unzipсделайте это:

unzip -j foo.zip '*report.xml' 
Интересное наблюдение! Неправильно, однако, я только что загрузил zip-файл на мой компьютер с Windows для тестирования, test0 - это каталог, содержащий report.xml. Однако ваша работа работает! Я получаю `предупреждение: 2747693b-7027-44d3-98f4-a01f1ed139cf.zip, кажется, использует обратную косую черту в качестве разделителей пути` Carmageddon 5 лет назад 0
Теперь у меня есть другая проблема ... Мой скрипт использовал unzip -j $ i $ filename - теперь мне нужно найти способ поставить знак вопроса вместо `` `\` `` Carmageddon 5 лет назад 0
Я предполагаю, что я заменю `$ filename` на` '* .report.xml'` ... Спасибо! Carmageddon 5 лет назад 0
Куда мы отправляем отчет об ошибке для распаковки? хотя пройдет несколько лет, пока корпоративные дистрибутивы не получат :) Carmageddon 5 лет назад 0
Сообщение об ошибке @Carmageddon? Честно говоря, я не знаю. Примечание: [похожая ситуация с `unrar`] (https://superuser.com/q/544786/432690). Kamil Maciorowski 5 лет назад 0
Хорошо, это не работает в моем скрипте :( Когда я делаю `unzip -j $ i '* report.xml' # $ filename` - я получаю сообщение об ошибке` Внимание: имя файла не совпадает: * report.xml # test0 \ report.xml `$ i - это имя файла zip, которое в данный момент зациклено Carmageddon 5 лет назад 0
@Carmageddon Я не знаю, что вы пытаетесь сделать с этим кодом. Я имел в виду «скрипт […] ищет совпадения с шаблоном` (. *) Report.xml` »и советовал вам сделать так, чтобы` unzip` обрабатывал все сопоставления - как `unzip -j" $ i "'* отчет. xml'`. Kamil Maciorowski 5 лет назад 0
не берите в голову, это работало :) Я думаю, что я должен был обернуть $ i в кавычки, как вы показали здесь ... он все еще жалуется и предостерегает, но он раздул файлы. Спасибо! Carmageddon 5 лет назад 0

Похожие вопросы