Löschen aller Unterverzeichnisse außer denen, die einem bestimmten Muster entsprechen

Löschen aller Unterverzeichnisse außer denen, die einem bestimmten Muster entsprechen

Ich möchte alle Unterverzeichnisse und Dateien in einem bestimmten Verzeichnis löschen, außer Verzeichnisse, die einem bestimmten Muster entsprechen:

example_dir/model-*/gen-*/share/**

Allgemeines Setup: Ich habe mehrere Modelle (> 100) generiert, von denen jedes >=1 Generation(en) hat. Innerhalb dieser Modelle (z. B. example_dir/model-0/gen-0/) gibt es mehrere Verzeichnisse und Unterverzeichnisse.

Gewünschtes Ergebnis: Ich möchte alle Verzeichnisse und Dateien löschen, außer denen, die übereinstimmen:

example_dir/model-*/gen-*/share/

Innerhalb jedes einzelnen Modells/Generation/sähe es ungefähr so ​​aus:

rm -rf !(share)

Antwort1

Ich bin mir nicht sicher, ob ich Ihre Frage ganz verstehe, und ich bin mir nicht sicher, welche Folgefragen sinnvoll sind. Eine Sache, die ich mich frage, ist, ob Sie einen Verzeichnisbaum wie

example_dir
|-- model-0
|   |-- gen-0
|   |   |-- share
|   |   |-- trash
|   |   |   |-- more_trash
|   |   |-- file123.txt
|   |-- grandfather
|-- platypus
foo

reicht es aus, example_dir/model-0/gen-0/trash (und dessen Inhalt) zu löschen, oder möchten Sie auch example_dir/model-0/grandfather, example_dir/platypusund löschen foo? Und wie wäre es mit example_dir/model-0/gen-0/file123.txt?

trashWenn Sie (und dessen Inhalt) und löschen möchten file123.txt, versuchen Sie

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)

trashWenn Sie (und den Inhalt) löschen, aber beibehalten möchten file123.txt, versuchen Sie

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)/

(Hinzufügen eines /nach !(share)).

Sehen Sie sich in jedem Fall die Ausgabe sorgfältig an und führen Sie den Befehl ohne das noch einmal aus, wenn Sie sicher sind, dass es das ist, was Sie möchten  echo.

Wenn Sie auch andere Verzeichnisse der obersten Ebene als example_dir, Verzeichnisse der ersten Ebene, die nicht dem model-*Muster entsprechen, oder Verzeichnisse der zweiten Ebene, die nicht dem gen-*Muster entsprechen, löschen möchten, bearbeiten Sie Ihre Frage bitte zur Klarstellung.

verwandte Informationen