Unterordner löschen, ohne den übergeordneten Ordner zu löschen


15

Für diese Art von Verzeichnisstruktur:

/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...

Ich weiß, dass ich mit rm -rf /config/filesgroupsdem übergeordneten Ordner und allen Unterordnern löschen kann ...

aber ich möchte nur löschen /filegroupA, /filegroupBetc., und nicht löschen/config/filegroups


13
Gibt es ein Problem bei der Verwendung von rm -rf / config / filesgroups / *?
— dsmsk80

3
Oder vielleicht sogar rm -rf /config/filegroups/filegroups{A,B}?
— Drav Sloan

@dsumsky Standardmäßig bashist '.' nicht enthalten. Ordner in der Pfadnamenerweiterung. Welche kann oder kann nicht erwünscht sein. Myself ich shopt -s dotglobin .bashrczu beheben , dass. Nur eine Randnotiz, die jemand nützlich finden könnte;).
— Miroslav Koškár

Hat irgendetwas für Sie gearbeitet? Wenn ja, würde es Ihnen etwas ausmachen, eine Antwort zu akzeptieren, um anderen (wie mir) zu helfen, die dasselbe tun möchten?
— Laut Mawg wird Monica

rm -rf /*wird tun;) --- ernsthaft nicht tun
— Muhammad Umer

Antworten:


28
rm -rf /config/filegroups/*

Wenn Sie nur Verzeichnisse (und Symlinks zu Verzeichnissen) löschen möchten, ohne dass Dateien /config/filegroupsberührt werden, können Sie einen abschließenden Schrägstrich verwenden:

rm -rf /config/filegroups/*/

Wenn Sie Verzeichnisse mit Namen löschen möchten, die ebenfalls mit einem beginnen ., sollten Sie die dotglob-Shell-Option verwenden:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob

und bitte nicht, dass es nicht funktioniert für rm -rf "/ config / filegroups / *"
— Ilya Yevlampiev

5

Dadurch werden alle Dateien und Verzeichnisse unter /config/filegroupseinschließlich "versteckter" Dateien und Verzeichnisse (Namen beginnend mit .) gelöscht .

find /config/filegroups -mindepth 1 -maxdepth 1 | xargs rm -rf

Wenn die Datei- oder Verzeichnisnamen Leerzeichen enthalten, müssen Sie dies folgendermaßen tun:

find /config/filegroups -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

Bonus: Sie können zunächst überprüfen, was wie folgt gelöscht wird:

find /config/filegroups -mindepth 1 -maxdepth 1

Wenn Sie bestimmte Dateien oder Verzeichnisse behalten möchten, können Sie dies folgendermaßen tun:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"

Gibt es einen Grund , nicht zu verwenden , find‚s - -deleteOption?
— Übelsuppe

4
-deleteweigert sich, nicht leere Verzeichnisse zu löschen. -maxdepthÜberschreibungen -depth, die erforderlich sind -delete, um nicht leere Verzeichnisse zu löschen. Ohne können -maxdepthSie nicht leicht erkennen, welche Verzeichnisse gelöscht werden, da auch die Dateien in den Verzeichnissen aufgelistet werden. Nicht verwenden -maxdepthbedeutet auch, dass Sie Filter wie nicht einfach verwenden können -name. Außerdem werden -deletedie Verzeichnisse gelöscht, indem zuerst alle darin enthaltenen Objekte gelöscht werden. Dies kann bei großen und tiefen Bäumen sehr lange dauern.
— Lesmana

4

Ich bevorzuge die Verwendung von findmit -exec, das würde Ihren Anruf in etwa so machen:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;

-2

Wenn Sie sich bereits im Ordner befinden, können Sie einfach eingeben rm -rf ./**

So:

cd /config/filesgroups
rm -rf ./**

Dies ist ein Glob-Muster zum Löschen aller Unterordner aus dem lokalen Pfad.

./Beziehen sich auf den lokalen Ordner ... und **auf alle Ordner darunter.


1
Welcher Ordner, und warum "**"
— RalfFriedl

1
Dies ist genau das Gleiche wie rm -rf ./*, mit der Ausnahme, dass Sie wahrscheinlich Diagnosemeldungen zu "Keine solche Datei oder kein solches Verzeichnis" erhalten, wenn Sie es nicht -fin Ihrem Befehl verwenden (da das oberste Verzeichnis rekursiv gelöscht würde, bevor sein Inhalt verarbeitet wird von rm).
— Kusalananda
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.