Zip warning name not matched что делать
zip command show warnings «name not matched» about symlinks, outside of my working directory, pointing to non-existing target
I have some weird warnings when zipping a directory’s content. I use a command line I use for a ton of websites backup since years and never had such issue, and I try to figure out why I have the warnings (even though the zip files seem created correctly) and I fail to figure it out in a reasonable time (I have put what I found, keep reading).
I go in the directory I want to backup to a zip file:
Here is the command I run (I tailored it to debug only and reproduce problem):
For some reason it logs these warnings right at the beginning:
Now, there is NO symlinks in the directory I zip content of (I did execute a command to find if there was even deepdown and there is none).
Heck, just to be sure, I just even tried to create a new directory /home/mickoz/michael.muryn.name2, created two text files in it only. Run the same zip command I put above in that new directory. and the exact same warnings appear! Seem like it tries to search outside of the directory, but I fail to see why as I exclude «..*» in my zip command and that should do the job.
I even tried to do it in a directory named /home/mickoz/testzipbackup in case the dots in the directory name was causing problem and the same result.
Any idea what may be causing this? How can I debug this?
There was a symbolic link located there
Take note that the symlink was pointing to something non-existing. This seems important as I debug more and more.
I deleted it and re-executed my test zip command, and this line disappeared from the log:
So it definitely try to search outside the directory for some reason and I fail to see why it does it with what looks like symbolic link only, while excluding files correctly it seems.
From there I dug deeper and did a search for all symbolic links on my user account by using this command in the root of the home directory:
Here is a specific and interesting sample of the result:
I analyzed this and found out that only symlinks that are pointing to non-existing target appears in my zip command warnings.
Now, only have to understand why the zip command looks for those symlinks outside of the working directory and only acts/emits a warning on the symlinks pointing to non-existing target.
I am creating an sh file to run multiple commands in the background.
At some line in this file, there is a command to update a zip file like:
This file.txt might not be a part of the archive.zip always. When it isn’t, the shell script breaks in that line with:
I want it to continue to the following lines with ignoring non-existence of this file. How can I accomplish this?
1 Answer 1
Normally in a shell script, even a line that generates an error will not stop the shell script from executing. It will just go on to the next line.
Remove that option. This might have ramifications for the rest of your script so don’t do this on a whim.
Toggle the option off for the section of the script you are in, then turn it back on to continue:
Provide a way-out for the failing line so that the shell sees the command as a success even if something failed. This can be done a lot of ways but one simple one is to use the OR operator:
This will run the zip command, but if it fails it will run the true command and the parent shell will get the return code from that (which is of course, a success). You might see this sometimes written ||: which is slightly faster and trickier but not magic; : just happens to be a shell builtin no-op command that will also return a success error code even though it does nothing.
On the other hand if you just want to suppress the error message generated by zip, you can redirect the stardard error stream to /dev/null with ( 2> /dev/null ) to suppress the generated messages (or close it with 2>&- ).
Я создаю sh-файл для запуска нескольких команд в фоновом режиме.
В некоторой строке этого файла есть команда для обновления zip-файла, например:
Этот файл.txt не всегда является частью файла archive.zip. Когда это не так, сценарий оболочки разбивается на эту строку с помощью:
Я хочу, чтобы он продолжал следующие строки, игнорируя несуществование этого файла. Как я могу это сделать?
Обычно в сценарии оболочки даже строка, которая генерирует ошибку, не останавливает выполнение сценария оболочки. Он просто перейдет к следующей строке.
Удалите эту опцию. Это может иметь последствия для остальной части вашего скрипта, поэтому не делайте этого по прихоти.
Переключите параметр в разделе сценария, в котором вы находитесь, затем верните его, чтобы продолжить:
Обеспечьте выход для линии сбоя, чтобы оболочка воспринимала команду как успешную, даже если что-то не получилось. Это можно сделать много, но один простой – использовать оператор OR:
Это запустит zip-команду, но если она не удастся, она запустит настоящую команду, а родительская оболочка получит код возврата из этого (что, конечно, имеет успех). Вы могли бы видеть, что это иногда написано ||: это немного быстрее и сложнее, но не волшебство; : просто случается, что команда shell не содержит команду no-op, которая также вернет код ошибки успеха, даже если он ничего не делает.
С другой стороны, если вы просто хотите подавить сообщение об ошибке, генерируемое zip, вы можете перенаправить поток ошибок stardard в / dev / null с помощью ( 2> /dev/null ), чтобы подавить сгенерированные сообщения (или закрыть его с помощью 2>&- ).
Команда zip не работает
Я пытаюсь закрепить файл с помощью команды shell script. Я использую следующую команду:
и еще одна вещь, которую я заметил, что файл, который, наконец, находится в списке файлов в папке, имеет вышеуказанное предупреждение и этот файл не получает заархивированный файл.
Может ли кто-нибудь объяснить мне, почему это происходит? Я новичок в мире оболочки script.
zip warning: имя не соответствует: myfile.dat
Это означает, что файл myfile.dat не существует.
Вы получите ту же ошибку, если файл является символической ссылкой, указывающей на несуществующий файл.
Я уверен, последняя строка будет неверной, например:
. или что-то вроде этого вместо :myfile.dat: без символов перед последним :
UPDATE
Затем обрабатывается как:
И генерирует ошибки:
Первый, потому что теперь он пытается добавить folder.zip в архив вместо того, чтобы использовать его в качестве архива. Второй и третий, поскольку он пытается использовать файл /usr/bin/zip.zip как архив, который (к счастью) не доступен для записи обычным пользователем.
Примечание. Это действительно старый вопрос, но я не нашел этот ответ нигде, поэтому я отправляю его, чтобы помочь будущим искателям (включая мое будущее).
eebbesen попал в гвоздь в своем комментарии к моему делу (но я не могу голосовать за комментарий).
Другой возможной причиной, пропущенной в других комментариях, является файл, превышающий ограничение размера файла (4 ГБ).
пробелы не допускаются:
zip warning: имя не соответствует: borrar/enviar добавление: borrar/(сохранено 0%)
Следовательно, попробуйте изменить разрешения файла. Если вы пытаетесь отправить их по электронной почте, и эти фильтры электронной почты (например, Gmail) придумывают глупые фильтры, не отправляющие исполняемые файлы, не забывайте, что очень строгое разрешение при создании сжатия zip может быть причиной ошибки, о которой вы сообщаете, «имя не соответствует».
Zip warning name not matched
Я пытаюсь закрепить файл с помощью команды shell script. Я использую следующую команду:
и еще одна вещь, которую я заметил, что файл, который, наконец, находится в списке файлов в папке, имеет вышеуказанное предупреждение и этот файл не получает заархивированный файл.
Может ли кто-нибудь объяснить мне, почему это происходит? Я новичок в мире оболочки script.
zip warning: имя не соответствует: myfile.dat
Это означает, что файл myfile.dat не существует.
Вы получите ту же ошибку, если файл является символической ссылкой, указывающей на несуществующий файл.
Я уверен, последняя строка будет неверной, например:
. или что-то вроде этого вместо :myfile.dat: без символов перед последним :
Я пытаюсь сжать файл с помощью команды сценария оболочки. Я использую следующую команду:
и еще одна вещь, которую я заметил, что файл, который находится на последнем месте в списке файлов в папке имеет вышеуказанное предупреждение, и этот файл не получает заархивированы.
Может кто-нибудь объяснить мне, почему это происходит? Я новичок в оболочку мира сценария.
застежка-молния предупреждение: название не соответствует: myfile.dat
Вы получите ту же ошибку, если файл является символической ссылкой указывает на несуществующий файл.
Я держал пари, что последняя строка будет неверной, например:
ОБНОВИТЬ
I have a folder of around 180 GBs, I need to zip it like:
So how do I do this? On another note, archive.zip does not exist, but I’m trying to create it.
4 Answers 4
Your command should be:
The manual page ( man zip ), shows you should have:
This error can also be caused by symbolic links in the directory tree being compressed.
If these don’t have correct destinations (perhaps because the directory has been moved or copied from elsewhere), zip will attempt to follow the symlink to archive the target file.
The problem is that ls just lists the files off as if it were in the current directory and this is why zip is complaining (essentially the files do not exist to zip because it is being told to look in the wrong/current directory).
If this is your issue you can correct it like so: