Antworten:
Um Ihre Frage direkt zu beantworten: "Nein - Sie können nicht tun, was Sie beschreiben rm".
Sie können es jedoch tun, indem Sie es damit kombinieren find. Hier ist eine von vielen Möglichkeiten, wie Sie das tun können:
# search for everything in this tree, search for the file pattern, pipe to rm
find . | grep <pattern> | xargs rm
Wenn Sie beispielsweise alle * ~ -Dateien mit einem Nuke versehen möchten, können Sie dies folgendermaßen tun:
# the $ anchors the grep search to the last character on the line
find . -type f | grep '~'$ | xargs rm
So erweitern Sie einen Kommentar * :
# this will handle spaces of funky characters in file names
find -type f -name '*~' -print0 | xargs -0 rm
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 rmwird viel robuster sein. Dies bedeutet jedoch, dass Sie die Prädikate nicht verwenden können grepund müssen, um findnur die gewünschten Dateien abzugleichen und zu drucken. Das zweite Beispiel von warren wird robuster sein als find -type f -name '*~' -print0 | xargs -0 rm.
"ohne andere Befehle zu benutzen"
Nein.
Mit Bash, mit globstarset, yes :
rm basedir/**/my*pattern*
Probieren Sie es zB ls -1zuerst aus, bevor rmSie die passenden Dateien auflisten.
Sie setzen Optionen durch zB shopt -s globstar.
Alternativ eine kürzere findVariante:
find -type f -name 'my*pattern*' -delete
oder für GNU find:
find -type f -name 'my*pattern*' -exec rm {} +
oder eine andere Alternative für Nicht-GNU find(etwas langsamer):
find -type f -name 'my*pattern*' -exec rm {} \;
Wenn Sie auch Verzeichnisse entfernen möchten, gehen Sie wie folgt vor: Wechseln Sie rmin rm -rdie obigen Befehle und überspringen Sie den Abgleich nur -type fin den findBefehlen.
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.
Wenn Sie zsh (1) verwenden , setopt extendedglobaktivieren 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.