Wenn ich den folgenden Code im Ubuntu-Terminal verwende, funktioniert es einwandfrei:
rm !(*.sh) -rf
Wenn ich jedoch denselben Zeilencode in ein Shell-Skript (clean.sh) einfüge und das Shell-Skript vom Terminal aus ausführe, wird ein Fehler ausgegeben:
clean.sh-Skript:
#!/bin/bash
rm !(*.sh) -rf
Der Fehler, den ich bekomme:
./clean.sh: line 2: syntax error near unexpected token `('
./clean.sh: line 2: `rm !(*.sh) -rf'
kannst du helfen?
command-line
bash
scripts
rm
Tal
quelle
quelle
Antworten:
rm !(*.sh)
ist eineextglob
Syntax, die bedeutet, dass alle Dateien außer denen mit der.sh
Erweiterung entfernt werden.In Ihrer interaktiven
bash
Instanz ist die Shell-Optionextglob
aktiviert:Jetzt, da Ihr Skript in einer Subshell ausgeführt wird, müssen Sie dies aktivieren,
extglob
indem Sie dies am Anfang des Skripts hinzufügen:Ihr Skript sieht also so aus:
EDIT:
So entfernen Sie alle Dateien mit Ausnahme der
.sh
ErweiterungsdateienGLOBIGNORE
(da Sie diese nicht aktivieren möchtenextglob
):Beispiel:
quelle
shopt -s extglob
?Ok, es ist ein Cross-Post, aber ich muss eine Antwort schreiben. ;)
Sie könnten
find
stattdessen verwendenquelle
Sie müssen einschalten
extglob
:quelle
man bash
. Es ermöglicht ein erweitertes Globbing wie!(...)
.shopt -s extglob