
Итак, у меня есть скрипт, который перебирает 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
вместо этого написано.
Я перепробовал все, что угодно, например \, или /, или //, поэтому не думаю, что это проблема экранирования обратной косой черты.
Пожалуйста помоги.
решение1
Я воссоздал проблему в моем 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'