Здесь происходит две вещи.
Во-первых,
zip -r -qv test.zip *.* -x "..*" -x test.log -x test.zip
расширяется оболочкой, чтобы перечислить все, что соответствует *
и .*
, включая ..
в вашем случае.
Во-вторых, zip
проверяет все имена файлов, которые ему даются, когда его просят выполнить рекурсию, прежде чем фильтровать исключенные шаблоны; поэтому он видит ../logs/michael.muryn.name/http.2810216.bak/html/daily.html
и т. д. и вызывает для них stat
, что приводит к ошибке, и в результате zip
выводит «имя не соответствует».
Обычный способ избежать этого — указать .[^.]*
вместо .*
или, поскольку вы также соответствуете *
, запустить
zip -r -qv test.zip. -x test.log -x test.zip
вместо этого.
source
(из csh )или.
(из оболочки Bourne )— это встроенные команды оболочки, которые запрашивают у этой оболочки read
и интерпретируют код оболочки, хранящийся в файле, переданном в качестве аргумента.
Время, необходимое для выполнения, — это время, необходимое для чтения и интерпретации этого кода, так что все зависит от того, что делает этот код.
Например, если этот код имеет:
var=$var$var
Что удваивает размер переменной $var
каждый раз, когда она запускается, легко представить, что чем больше вы запускаете этот код, тем больше времени требуется для его запуска, поскольку объем данных, которые необходимо копировать, удваивается каждый раз. время, когда вы запускаете его.
Чтобы узнать, какая команда занимает больше всего времени, вы можете выполнить:
PS4='%D{%T.%3.} %N:%i> '; set -o xtrace; source ~/.zshrc
Что будет печатать каждую выполняемую команду с отметкой времени с точностью до миллисекунды.