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/forum/bash-alle-dateien-loeschen-mit-ausnahmen-1742560408.html

Printed on: January 24, 2025 at 12:01 o'clock

141986
141986 Jan 20, 2022 updated at 08:48:32 (UTC)
Goto Top
Hi,

extglob aktiv?

shopt -s extglob


VG

Soße:
Kopiert von hier
instinctless
instinctless Jan 20, 2022 at 09:43:37 (UTC)
Goto Top
ja, ist aktiv
colinardo
Solution colinardo Jan 20, 2022 updated at 11:50:23 (UTC)
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 Jan 20, 2022 at 12:13:30 (UTC)
Goto Top
Danke, das mit den " war mir nicht klar.