Muitos me incluindo tiveram problemas para descobrir como usar -X, e acharam a resposta difícil de lembrar (entre anos de intervalo entre o uso).
Esse é um truque difícil de lembrar:
$ 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/ ...
RESPOSTA:
site hack wget -? / src / utils.c para usar o basename em vez do caminho atual, também na linha de comando use o nome do arquivo padrão (apenas 'fo * o', nada mais). e observe o parâmetro FNM_PATHNAME definido como 0 (caso contrário, será necessário '/' para concluir o final da correspondência). o patch a seguir é contra o wget-1.12 ai meu ser uma maneira mais simples definindo? FNM_FLAGS mas isso funciona "bem".
--- 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 == '$ 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/ ...
' && (*d2 == '--- 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 == '%pre%' && (*d2 == '%pre%' || *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;
}
' || *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;
}