Ich habe eine bestimmte Gruppe von zwei Ordnern, die sich an vielen Stellen auf meinem CentOS-Server befinden. Nehmen wir an, diese Ordner sehen so aus:
aaa/bbb/cat
aaa/bbb/dog
Die Namen und die Struktur von aaa
, bbb
, cat
und dog
sind festgelegt, sie kommen jedoch an mehreren Stellen auf dem Server vor. Zum Beispiel:
/folder1/aaa/bbb/cat
/folder1/aaa/bbb/dog
/folder2/folder3/folder4/aaa/bbb/cat
/folder2/folder3/folder4/aaa/bbb/dog
etc...
cat
Mit welchem Befehl kann ich ALLE Dateien innerhalb jeder Instanz von und dog
auf dem Server löschen , aber nur, wenn es sich, wie oben gezeigt, um Unterordner von bbb
bzw. handelt?aaa
Danke!
Antwort1
Ab Bash 4.0 können Sie verwenden shopt -s globstar
. Standardmäßig nicht aktiviert.
Mit deinem Beispiel
ls **/aaa/bbb/cat/* # globstar not enabled
ergibt Ordner1/aaa/bbb/cat/1
shopt -s globstar
ls **/aaa/bbb/cat/* # globstar ENABLED
gibt
folder1/aaa/bbb/cat/1 folder2/folder3/folder4/aaa/bbb/cat/3
Dies ist das tree .
Beispiel Ihres Beispiels.
.
├── folder1
│ └── aaa
│ └── bbb
│ ├── cat
│ │ └── 1
│ └── dog
│ └── 1
├── folder2
│ └── folder3
│ └── folder4
│ └── aaa
│ └── bbb
│ ├── cat
│ │ └── 3
│ └── dog
│ └── 4
Natürlich können Sie es auch mit „dog“ statt „cat“ wiederholen :-)
Prüfen Sie vor dem Einfügen mit ls
und entfernen Sie nach dem Einfügen mit rm
. Hinweise:
Sie müssen daran denken, globstar ( shopt -s globstar
) in jeder neuen Shell zu aktivieren, in der Sie diese Syntax verwenden möchten, andernfalls können Sie es in Ihre ~..bash_rc
Datei einfügen...
Antwort2
find
Zweimal laufen
find . -path "*/aaa/bbb/cat/*" -delete
find . -path "*/aaa/bbb/dog/*" -delete
oder
find . \( -path "*/aaa/bbb/cat/*" -o -path "*/aaa/bbb/dog/*" \) -delete