¿Por qué la opción -x excluir en zip no parece excluir realmente la ruta?

¿Por qué la opción -x excluir en zip no parece excluir realmente la ruta?

Al usar Raspbian en una Raspberry Pi, quiero hacer una copia de seguridad de los archivos/etc, pero no de todos. Me gustaría excluir /etc/alternatives, así que usé este comando:

sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* –x /etc/alternatives/*

¿Por qué esto no funciona? Continúa incluyendo el contenido de /etc/alternatives al igual que todas las demás carpetas en /etc.

Probé estas variaciones y tampoco funcionaron.

sudo zip -r –x /etc/alternatives/* @ /home/pi/backup/$timestamp/etcfilesall.zip /etc/*
sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* –x /etc/alternatives
sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* –x '/etc/alternatives'
sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* –x '/etc/alternatives/*'

Bajo la opción -r para recursividad, la ayuda de zip -h2 dice "Use -i y -x para incluir o excluir rutas", por lo que parece que lo que estoy tratando de hacer debería ser compatible.

Respuesta1

El problema es que el "-" antes de la "x" (para la opción "-x") no es realmente un signo menos ASCII en la pregunta de OP. En cambio, es Unicode u+2013 (se ve igual, pero no actúa igual).

Si el comando se escribe como se esperaba, funciona como se esperaba para el último ejemplo de OP (corregido aquí):

sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* -x '/etc/alternatives/*'

Probablemente se trataba de un problema resultante de cortar y pegar desde algún sitio web.

Otras lecturas:

Respuesta2

De man zipla página:

zip -r foo foo -x \*.o

que incluirá el contenido de foo en foo.zip y excluirá todos los archivos que terminen en .o. La barra invertida evita la sustitución del nombre del archivo del shell, de modo que la coincidencia de nombres se realiza mediante zip en todos los niveles del directorio.

Debe asegurarse de que su globo *no se expanda mediante el shell, sino mediante zipla utilidad misma; de lo contrario, solo afectará los archivos directamente en el directorio /etc/alternatives y no apuntará a los subdirectorios. Esto se puede hacer agregando una barra invertida delante *o entrecomitándolo:

sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* –x /etc/alternatives/\*

Sin embargo, parece que ya ha probado una forma similar; no me queda claro por qué no funcionó para usted, cuando debería hacerlo. Aún así, hay otras formas de lograr un efecto similar, como usar herramientas adicionales para excluir archivos que no desea antes de llamar a zipla utilidad:

sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip $(sudo find /etc | grep -v ^/etc/alternatives)

información relacionada