У многих, включая меня, были проблемы с пониманием того, как использовать -X, и ответ было трудно запомнить (между годами перерыва между использованием).
Трудно запомнить трюк, запишите его :)
$ wget -X fo*o ... # does not work for directories
$ wget -X */fo*o,*/*/fo*o,*/*/*/fo*o ... # works for directories
$ wget -X \*/fo\*o/,\*/\*/fo\*o/,\*/\*/\*/fo\*o/ ...
ОТВЕТ:
взломать сайт wget -? / Src / utils.c, чтобы использовать базовое имя вместо текущего пути, также в командной строке используйте шаблон имени файла (просто «fo * o», больше ничего). и обратите внимание, что для параметра FNM_PATHNAME установлено значение 0 (в противном случае он требует '/' для завершения хвоста совпадения). следующий патч против wget-1.12 есть более простой способ, определив? FNM_FLAGS, но это работает "нормально".
--- utils.c.old 2016-09-13 07:49:11.000000000 -0400
+++ utils.c 2016-09-13 09:32:58.000000000 -0400
@@ -907,6 +907,9 @@
return *d1 == '\0' && (*d2 == '\0' || *d2 == '/');
}
+/* for basename */
+#include <libgen.h>
+
/* Iterate through DIRLIST (which must be NULL-terminated), and return the
first element that matches DIR, through wildcards or front comparison (as
appropriate). */
@@ -921,18 +924,24 @@
{
/* Remove leading '/' */
char *p = *x + (**x == '/');
+ /* SITE HACK - only if patterned ignore leading dirs cmp as file */
+ char sh_str[1024*16], *pp;
+ strcpy(sh_str,basename(dir));
+ pp=sh_str;
+#if 0
+ printf("? %s == %s ?\n",p,pp);
+#endif
if (has_wildcards_p (p))
{
- if (matcher (p, dir, FNM_PATHNAME) == 0)
+ if (matcher (p, pp, 0) == 0)
break;
}
else
{
- if (subdir_p (p, dir))
+ if (subdir_p (p, pp))
break;
}
}
-
return *x ? true : false;
}