Ich habe folgenden Code:
find ./ -iname '*phpmyadmin' -exec rm -rf {} \;
Es löscht ein Verzeichnis namens phpmyadmin
, aber es nicht löscht eine Datei namensphpMyAdmin-Version-XYZ.zip
Selbst wenn ich das entferne -rf
, wird es immer noch nicht gelöscht (wahrscheinlich, weil ein zweites Problem mit dem -iname die Groß- und Kleinschreibung nicht beeinflusst).
- Gibt es eine Möglichkeit, einen Inode in einem einzelnen RM (Datei, Verzeichnis, Softlink) zu löschen?
- Warum wirkt sich das Hinzufügen
-iname
nicht aus?
Hinweis: Ich habe in kein Argument "Inode löschen" gefunden man rm
.
find
unterstützen, versuchen Sie es mit der-delete
Aktion. (Siehe auch gnu.org/software/findutils/manual/html_node/find_html/… für eine ausführliche Diskussion der vielen Möglichkeiten, dies falsch zu machen.)Antworten:
Das Problem besteht darin, dass Sie mithilfe des Musters eine Datei abgleichen, die
phpmyadmin
(ohne Berücksichtigung der Groß- und Kleinschreibung ) endet*phpmyadmin
. Um eine Datei, die die Zeichenfolge enthältphpmyadmin
(case-insensitiv), Verwendung-iname '*phpmyadmin*'
:Vielleicht wäre es vernünftig, die übereinstimmenden Dateien vor dem Entfernen zu erhalten:
Um Ihre erste Frage zu beantworten, gibt es
rm
im Benutzerbereich keine Option , um mit Inodes umzugehen.quelle
-depth
werden,find
damit nicht versucht wird, in ein Verzeichnis zurückzukehren, das gerade gelöscht wurde.find
vor dem Hinzufügen des-exec
Parameters nicht getestet hat . Sehr gefährlich.-exec rm -rf {} +
- kein Grund für die Leistungsbeeinträchtigung, einerm
pro Datei auszuführen.Dies funktioniert auch dann, wenn jemand ein -phpmyadmin-Verzeichnis erstellt.
quelle
./
, so dass dies nicht erforderlich ist: Es würde ausgeführtrm -rf ./-phpmyadmin
, was mit jedem vernünftigen funktionieren sollterm
. Versuchen Siefind ./ -iname '*whatever*' -exec echo '{}' ';'
zu testenfind */
stattfind .
, dass es tun würde (wenn ein passender Verzeichnisname mit einem Bindestrich gestartet). Trotzdem würde ich eher vorschlagen--
, solche Fälle zu behandeln, indem vor dem{}
Argument ein explizites Ende der Optionen angegeben wird . (Siehe Nr. 10 in den Syntaxrichtlinien des POSIX-Dienstprogramms .){} +
ist erheblich effizienter als{} \;
, da nur so viele Instanzen Ihres Befehls (nuke
in diesem Fall) ausgeführt werden, wie für alle in der Befehlszeile gefundenen Elemente erforderlich sind, im Gegensatz zu jeweils einer.find */
würden, würde das Problem nicht auftreten-exec
. Das Verzeichnis mit einem Bindestrich scheint einefind
Option zu sein, und es würde sich beschweren.