Ich habe einen Ordner mit vielen Ordnern und verschiedenen Dateien mit den folgenden Strukturen:
NASA
│
├── a
│ ├── doc1
│ ├── doc2
│ ├── doc3
│ ├── folder1
│ └── folder2
│
├── b
│ ├── doc1
│ ├── doc2
│ ├── doc3
│ ├── folder1
│ └── folder2
│
├── c
│ ├── doc1
│ ├── doc2
│ ├── doc3
│ ├── folder1
│ └── folder2
│
├─ x
├─ y
└─ z
Ich möchte den Inhalt des Ordners ( NASA/
) mit Ausnahme der angegebenen Ordner und Dateien löschen .
Zum Beispiel möchte ich a
Ordner, b
Ordner und x
Datei behalten .
Ich habe diese Lösung ausprobiert :
rm !(a/) -r NASA/
Und (wie in der Antwort hier erklärt ):
find NASA/ -type f ! -iname "x" -delete
Aber das ist nicht sehr einfach und ich muss ein Bash-Skript verwenden.
Vermisse ich einen einfacheren Weg? Wie kann ich das in einem einzigen Befehl tun?
command-line
bash
hg8
quelle
quelle
rm -r c y z
Antworten:
Sie können verwenden
GLOBIGNORE
, um die Namen festzulegen, die beim Globbing ignoriert werden, und um dann*
alle anderen Dateien / Verzeichnisse abzugleichen :Beispiel:
Alternativ können Sie
find
aus demNASA
Verzeichnis Folgendes verwenden:Beispiel:
quelle
Sie können das erweiterte Globbing verwenden, aber das Ausrufezeichen steht vor dem Muster:
Wenn
extglob
nicht eingeschaltet, aktivieren Sie es zuerst:quelle