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-Key: 1742560408

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

Printed on: July 21, 2024 at 00:07 o'clock

Mitglied: 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
Member: instinctless
instinctless Jan 20, 2022 at 09:43:37 (UTC)
Goto Top
ja, ist aktiv
Member: 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
Member: instinctless
instinctless Jan 20, 2022 at 12:13:30 (UTC)
Goto Top
Danke, das mit den " war mir nicht klar.