Entfernen Sie alle Dateien in einem bestimmten Ordner unter Linux

Entfernen Sie alle Dateien in einem bestimmten Ordner unter Linux

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, catund dogsind 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...

catMit welchem ​​Befehl kann ich ALLE Dateien innerhalb jeder Instanz von und dogauf dem Server löschen , aber nur, wenn es sich, wie oben gezeigt, um Unterordner von bbbbzw. 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 lsund 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_rcDatei einfügen...

Antwort2

findZweimal 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

verwandte Informationen