Ist es möglich, mit rm Dateien und Verzeichnisse zu entfernen, die einem Muster rekursiv entsprechen, ohne andere Befehle zu verwenden?
unix
maintenance
rm
user15586
quelle
quelle
find | grep | xargs rm
. Wenn Dateien mit Leerzeichen (oder Zeilenumbrüchen) vorhanden sind, kann dies dazu führen, dass (abhängig von den Dateinamen und der Position der Leerzeichen) Daten gelöscht werden, die Sie nicht löschen wollten.find … -print0 | xargs -0 rm
wird viel robuster sein. Dies bedeutet jedoch, dass Sie die Prädikate nicht verwenden könnengrep
und müssen, umfind
nur die gewünschten Dateien abzugleichen und zu drucken. Das zweite Beispiel von warren wird robuster sein alsfind -type f -name '*~' -print0 | xargs -0 rm
."ohne andere Befehle zu benutzen"
Nein.
quelle
Mit Bash, mit
globstar
set, yes :Probieren Sie es zB
ls -1
zuerst aus, bevorrm
Sie die passenden Dateien auflisten.Sie setzen Optionen durch zB
shopt -s globstar
.Alternativ eine kürzere
find
Variante:oder für GNU
find
:oder eine andere Alternative für Nicht-GNU
find
(etwas langsamer):Wenn Sie auch Verzeichnisse entfernen möchten, gehen Sie wie folgt vor: Wechseln Sie
rm
inrm -r
die obigen Befehle und überspringen Sie den Abgleich nur-type f
in denfind
Befehlen.quelle
Ich hätte "rm -rf" abgesaugt, wo eine Kombination aus Dateinamen und übereinstimmenden Mustern wie * und? etc (zB todays_log_2009 ????. log). Das startet mit dem aktuellen Verzeichnis und führt dazu, dass Dateien, die dieses Muster enthalten, rekursiv entfernt werden.
quelle
Wenn Sie zsh (1) verwenden ,
setopt extendedglob
aktivieren Sie "Extended Globbing" mit in .zshrc. Das Präfixieren des Musters mit '** /' löscht dann rekursiv:% rm -rf ** / <Muster>
Wenn Sie jedoch viele Dateien löschen möchten, sollten Sie auf find (1) mit xargs (1) oder -exec zurückgreifen, und ich empfehle, dies auch in Shell-Skripten zu tun.
quelle