rm exclude / remove exclude

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

rm exclude / remove exclude

Beitrag von Quickly1971 » 30.04.2018 12:51:56

Hallo.

Ich möchte gerne im Vereichnnis "/mnt/usb-hdd" alles löschen, außer den Ordner mit dem Namen (Variable) "$hostname".
Sorry, ich habe gesucht. Jedoch echt die Hose voll. Ich möchte hier keine "Versuche" unternehmen die dann im Chaos enden.

Code: Alles auswählen

root@proxmox1:~# ls -lh /mnt/usb-hdd/
total 16K
drwxrwxrwx 4 root root 4.0K Apr 30 12:42 proxmox1
drwxr-xr-x 2 root root 4.0K Apr 30 12:42 test1
drwxr-xr-x 2 root root 4.0K Apr 30 12:42 test2
drwxr-xr-x 2 root root 4.0K Apr 30 12:42 test3
THX
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.

cronoik
Beiträge: 2049
Registriert: 18.03.2012 21:13:42
Lizenz eigener Beiträge: GNU Free Documentation License

Re: rm exclude / remove exclude

Beitrag von cronoik » 30.04.2018 13:30:52

Code: Alles auswählen

cronoik@debian:~/bal$ ls -alR 
.:
total 24
drwxr-xr-x  6 cronoik cronoik 4096 Apr 30 13:18 .
drwxr-xr-x 46 cronoik cronoik 4096 Apr 30 13:15 ..
drwxr-xr-x  2 cronoik cronoik 4096 Apr 30 13:18 proxmox1
drwxr-xr-x  2 cronoik cronoik 4096 Apr 30 13:18 test1
drwxr-xr-x  2 cronoik cronoik 4096 Apr 30 13:19 test2
drwxr-xr-x  2 cronoik cronoik 4096 Apr 30 13:18 test3

./proxmox1:
total 8
drwxr-xr-x 2 cronoik cronoik 4096 Apr 30 13:18 .
drwxr-xr-x 6 cronoik cronoik 4096 Apr 30 13:18 ..

./test1:
total 8
drwxr-xr-x 2 cronoik cronoik 4096 Apr 30 13:18 .
drwxr-xr-x 6 cronoik cronoik 4096 Apr 30 13:18 ..
-rw-r--r-- 1 cronoik cronoik    0 Apr 30 13:18 1.1
-rw-r--r-- 1 cronoik cronoik    0 Apr 30 13:18 1.2

./test2:
total 8
drwxr-xr-x 2 cronoik cronoik 4096 Apr 30 13:19 .
drwxr-xr-x 6 cronoik cronoik 4096 Apr 30 13:18 ..
-rw-r--r-- 1 cronoik cronoik    0 Apr 30 13:19 2.1
-rw-r--r-- 1 cronoik cronoik    0 Apr 30 13:19 2.2

./test3:
total 8
drwxr-xr-x 2 cronoik cronoik 4096 Apr 30 13:18 .
drwxr-xr-x 6 cronoik cronoik 4096 Apr 30 13:18 ..
Im Ordner bal fuerhst du dann folgendes aus:

Code: Alles auswählen

find . -mindepth 1 -type d | grep -v test1 | xargs rm -rf
Wenn du unsicher bist dann fuehre statt dem rm -rf erst einmal ein "xargs echo 'rm -rf'" aus.
Hilf mit unser Wiki zu verbessern!

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: rm exclude / remove exclude

Beitrag von breakthewall » 30.04.2018 13:38:31

Beispiel:

Code: Alles auswählen

shopt -s extglob
rm -r /mnt/usb-hdd/!(test1)
Damit würde im jeweiligen Verzeichnis alles gelöscht werden, mit Ausnahme der "test1" genannten Datei. Das Suchmuster kann auch mehrere mittels "|" getrennte Dateien/Verzeichnisse enthalten. Ebenso können auch ganze Dateitypen wie "*.jpg" angegeben werden.

Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

Re: rm exclude / remove exclude

Beitrag von Quickly1971 » 30.04.2018 16:35:50

breakthewall hat geschrieben: ↑ zum Beitrag ↑
30.04.2018 13:38:31

Code: Alles auswählen

shopt -s extglob
rm -r /mnt/usb-hdd/!(test1)
Das hilft mir (fast) weiter.

Code: Alles auswählen

shopt -s extglob
rm -r /mnt/usb-hdd/!(proxmox1)
Kann ich den Namen "proxmox1" durch die Variable "hostname" ersetzen?
Das hier geht nicht.

Code: Alles auswählen

shopt -s extglob
rm -r /mnt/usb-hdd/!($hostname)
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.

Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

Re: rm exclude / remove exclude

Beitrag von Quickly1971 » 30.04.2018 17:01:02

Sorry, das hier geht doch.

Code: Alles auswählen

HOSTNAME1="$(hostname)"
shopt -s extglob
rm -r /mnt/usb-hdd/!($HOSTNAME1)
Vielen Dank.
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: rm exclude / remove exclude

Beitrag von tobo » 30.04.2018 17:59:14

Allgemein, auch wenn hostname restriktiv bei der Eingabe ist, solltest du die Ausgabe bzw. die Variable quoten:

Code: Alles auswählen

shopt -s extglob

//entweder:
HOSTNAME1="$(hostname)"
rm -r /mnt/usb-hdd/!("$HOSTNAME1")

//oder direkt:
rm -r /mnt/usb-hdd/!("$(hostname)")
Und bevor man nasse Ängste aussteht, benutzt man bei rm noch den Schalter -i.

Benutzeravatar
Meillo
Moderator
Beiträge: 9227
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: rm exclude / remove exclude

Beitrag von Meillo » 03.05.2018 09:50:21

Hier noch ein Workaround:

Code: Alles auswählen

mv "$hostname" ".$hostname"
rm -r *
mv ".$hostname" "$hostname"
Use ed once in a while!

Antworten