instinctless
Goto Top

Bash: Alle Dateien löschen mit Ausnahmen

Hi, ich würde gerne einen Ordner leeren, bis auf ein paar spezifische Dateien.
Mein Ansatz

rm -v !("*.foo*"|"*.bar")  

funktioniert leider nicht. Es werden alle Dateien im Ordner gelöscht, trotz "!"
Wo liegt der Fehler?

Content-ID: 1742560408

Url: https://administrator.de/contentid/1742560408

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

141986
141986 20.01.2022 aktualisiert um 09:48:32 Uhr
Goto Top
Hi,

extglob aktiv?

shopt -s extglob


VG

Soße:
Kopiert von hier
instinctless
instinctless 20.01.2022 um 10:43:37 Uhr
Goto Top
ja, ist aktiv
colinardo
Lösung colinardo 20.01.2022 aktualisiert um 12:50:23 Uhr
Goto Top
Servus.
Wo liegt der Fehler?
Da sind Anführungszeichen zu viel, mit denen wird das Sternchen literal interpretiert und es findet kein Globbing statt, somit wird auch nichts ausgeschlossen und es wird alles entfernt.
rm -v !(*.foo|*.bar)
Des weitere führen viele Wege nach Rom, hier noch ein paar ...
find . -type f \( ! -iname "*.foo" ! -iname "*.bar" \) -delete  
# -------------
find . -type f -regextype posix-egrep \( ! -iregex ".*\.(foo|bar)$" \) -delete  
# -------------
ls -1 | grep -Pv "\.(foo|bar)$" | xargs rm  
# -------------
shopt -s extglob
rm -v !(*.foo|*.bar)
usw.

Grüße Uwe
instinctless
instinctless 20.01.2022 um 13:13:30 Uhr
Goto Top
Danke, das mit den " war mir nicht klar.