it-swarm.com.de

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

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/filesgroups Den übergeordneten Ordner und alle Unterordner löschen kann ...

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

17
BaltoStar
rm -rf /config/filegroups/*

Wenn Sie nur Verzeichnisse (und Symlinks zu Verzeichnissen) löschen möchten und alle Dateien in /config/filegroups Unberührt lassen möchten, 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 . Beginnen, sollten Sie die Option dotglob Shell verwenden, vorausgesetzt, Sie haben eine relativ neue Bash:

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

Dadurch werden alle Dateien und Verzeichnisse unter /config/filegroups Gelöscht, einschließlich "versteckter" Dateien und Verzeichnisse (Namen, die mit . Beginnen).

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 werden soll:

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"
5
lesmana

Ich bevorzuge die Verwendung von find mit -exec, das würde Ihren Anruf ungefähr so ​​machen:

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