Bash ignoriert zip -x-Argumente

401
Viktor Koncsek

Das folgende Skript ignoriert alle -x-Ausschlussargumente, wenn es von der Bash ausgeführt wird, es funktioniert jedoch von der Befehlszeile aus:

#!/bin/sh TIMESTAMP=$(date +%u) ulimit -s 65536  WEEK=`date +"%V"` if [ $(($WEEK%2)) -eq 0 ]; then echo "even"; BACKUP_DIR="/mnt/backup/2_$TIMESTAMP" mkdir -p "$BACKUP_DIR/www" else echo "odd"; BACKUP_DIR="/mnt/backup/1_$TIMESTAMP" mkdir -p "$BACKUP_DIR/www"  fi  if [ $(date +%u) -gt 6 ]; then /usr/bin/zip -r -y $BACKUP_DIR/www/web.zip /var/www/ -x '*/.opcache/*' -x '*/phpThumb/cache/*' else /usr/bin/zip -r -y $BACKUP_DIR/www/web.zip /var/www/ -x '*/mycompany/files/*' -x '*/.opcache/*' -x '*/xml_extras/*' -x '*/files_admin/extras/*' -x '*/chatFiles/*' -x '*/phpThumb/cache/*' -x '*/backup-guard/*' -x '*/mailer/*' -x '*/mycompany/attachments/*' fi  exit 0 

Es ist eine 14-tägige Sicherungslösung, und ich möchte, dass die Wochentage die größeren Ordner wie Bilder ignorieren. Gibt es einen Grund, warum die -x-Argumente ignoriert werden?

0
Hinweis: Sie markieren [tag: bash], aber der Shebang verweist auf `sh`. Sie können das Skript von Bash aus ausführen, aber * wenn * eine Shell für das Problem relevant ist, dann ist es 'sh' anstelle von 'bash' (es sei denn, Sie * beziehen * aus Bash). Kamil Maciorowski vor 5 Jahren 1
@ KamilMaciorowski Danke !! Ich löste es mit Ihrem Kommentar, nachdem ich das Problem mit der Shell gegoogelt hatte, bemerkte ich, dass ich * nach \\ * fliehen muss. Viktor Koncsek vor 5 Jahren 0
Ehrlich gesagt verstehe ich es noch nicht wirklich. Nichts, worüber man sich Sorgen machen müsste. Ich denke, wenn Sie [Ihre eigene Frage beantworten] (https://superuser.com/help/self-answer) und erklären, dann werden Ihre Lösung und der Grund, warum das ursprüngliche Skript nicht funktioniert hat, klar. Kamil Maciorowski vor 5 Jahren 0
Trotzdem funktioniert es immer noch nicht richtig (außer in der Kommandozeile, das ist perfekt). Viktor Koncsek vor 5 Jahren 0
Ich habe diese Frage formal als Duplikat bezeichnet. Ich war du, ich würde es einfach löschen. Kamil Maciorowski vor 5 Jahren 0

1 Antwort auf die Frage

0
Viktor Koncsek

Ich löste es, indem ich das vordere '* /' entfernte und absolute Pfade verwende. Ich weiß immer noch nicht, warum diese im Terminal gearbeitet haben und warum nicht in einem Skript mit korrekten Klammern und Fluchten.