zip - Unterschied zwischen den Mustern "." und "* .[^.]*" bei Verwendung des Flags -r

zip - Unterschied zwischen den Mustern "." und "* .[^.]*" bei Verwendung des Flags -r

Gibt es beim rekursiven Zippen des Inhalts eines Verzeichnisses (einschließlich versteckter Dateien und Verzeichnisse) mithilfe zipeines Befehls mit -rFlag einen Unterschied zwischen:

zip ../foo.zip -r .

Und:

zip ../foo.zip -r * .[^.]*

oder sind sie genau gleich?

Der erste Befehl sollte das aktuelle Verzeichnis ( .) als Ziel nehmen und -rder Parameter sollte alle versteckten Dateien und Verzeichnisse enthalten.

Der zweite Befehl gleicht, wenn ich mich nicht irre, alle Dateien ab, die keine Punkte sind (zuerst *) im aktuellen Verzeichnis und dann alle Dateien, die mit .char beginnen, gefolgt von einem beliebigen Zeichen außer Punkt ( [^.]) – so dass der ..Wechsel ins übergeordnete Verzeichnis ausgeschlossen ist.

Ich habe den zweiten Befehl in einem Beispiel online gefunden, verstehe aber nicht, warum man ihn anstelle des einfacheren ersten Befehls verwenden sollte, wenn er genau dieselbe Funktion hat.

Außerdem beschwert sich ShellCheck in POSIX-Shell-Skripten über * .[^.]*die Notation, die durch ersetzt werden sollte ./* .[!.]*, und für mich ist das ein weiterer guter Grund, sie nicht zu verwenden, wenn eine einfache .den gleichen Job erledigt.

Meine Vermutung ist, dass in dem von mir gefundenen Beispiel zip ../foo.zip * .[^.]*(ohne -rFlag) der Befehl übernommen und -reinfach das Flag hinzugefügt wurde, ohne zu bedenken, dass bereits für die Einbeziehung versteckter Dateien und Verzeichnisse gesorgt worden wäre, wenn als Ziel anstelle von -rder aktuelle Pfad ( ) angegeben worden wäre ..* .[^.]*

Meine Fragen sind also: Sind diese beiden Befehle bei Verwendung der -rFlagge gleichwertig? Ist meine Vermutung richtig?

verwandte Informationen