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
dem übergeordneten Ordner und allen Unterordnern löschen kann ...
aber ich möchte nur löschen /filegroupA
, /filegroupB
etc., und nicht löschen/config/filegroups
rm -rf /config/filegroups/filegroups{A,B}
?bash
ist '.' nicht enthalten. Ordner in der Pfadnamenerweiterung. Welche kann oder kann nicht erwünscht sein. Myself ichshopt -s dotglob
in.bashrc
zu beheben , dass. Nur eine Randnotiz, die jemand nützlich finden könnte;).rm -rf /*
wird tun;) --- ernsthaft nicht tunAntworten:
Wenn Sie nur Verzeichnisse (und Symlinks zu Verzeichnissen) löschen möchten, ohne dass Dateien
/config/filegroups
berührt werden, können Sie einen abschließenden Schrägstrich verwenden:Wenn Sie Verzeichnisse mit Namen löschen möchten, die ebenfalls mit einem beginnen
.
, sollten Sie die dotglob-Shell-Option verwenden:quelle
Dadurch werden alle Dateien und Verzeichnisse unter
/config/filegroups
einschließlich "versteckter" Dateien und Verzeichnisse (Namen beginnend mit.
) gelöscht .Wenn die Datei- oder Verzeichnisnamen Leerzeichen enthalten, müssen Sie dies folgendermaßen tun:
Bonus: Sie können zunächst überprüfen, was wie folgt gelöscht wird:
Wenn Sie bestimmte Dateien oder Verzeichnisse behalten möchten, können Sie dies folgendermaßen tun:
quelle
find
‚s --delete
Option?-delete
weigert sich, nicht leere Verzeichnisse zu löschen.-maxdepth
Überschreibungen-depth
, die erforderlich sind-delete
, um nicht leere Verzeichnisse zu löschen. Ohne können-maxdepth
Sie nicht leicht erkennen, welche Verzeichnisse gelöscht werden, da auch die Dateien in den Verzeichnissen aufgelistet werden. Nicht verwenden-maxdepth
bedeutet auch, dass Sie Filter wie nicht einfach verwenden können-name
. Außerdem werden-delete
die Verzeichnisse gelöscht, indem zuerst alle darin enthaltenen Objekte gelöscht werden. Dies kann bei großen und tiefen Bäumen sehr lange dauern.Ich bevorzuge die Verwendung von
find
mit-exec
, das würde Ihren Anruf in etwa so machen:quelle
Wenn Sie sich bereits im Ordner befinden, können Sie einfach eingeben
rm -rf ./**
So:
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.quelle
rm -rf ./*
, mit der Ausnahme, dass Sie wahrscheinlich Diagnosemeldungen zu "Keine solche Datei oder kein solches Verzeichnis" erhalten, wenn Sie es nicht-f
in Ihrem Befehl verwenden (da das oberste Verzeichnis rekursiv gelöscht würde, bevor sein Inhalt verarbeitet wird vonrm
).