Wie die anderen schon erwähnt haben, ist xargs dein Freund. Es ist ein sehr leistungsfähiges Tool und ich werde versuchen, es zu erklären und eine Problemumgehung für einen allgemeinen Fall zu bieten.
Xargs übernimmt eine Zeile aus der Eingabe und hängt sie an einen anderen Befehl an, wobei dieser andere Befehl für jede Zeile in der Eingabe ausgeführt wird. Wenn Sie also tippen locate foobar | xargs rm -f
, wird die Ausgabe des Befehls locate an das Ende des rm -f
Befehls angehängt und für jede von erzeugte Zeile ausgeführt locate foobar
.
Die gotcha:
Aber was ist, wenn Ihre von locate zurückgegebenen Zeilen Leerzeichen enthalten? Dadurch wird der rm -f
Befehl abgebrochen, da die an rm übergebenen Argumente Dateien sein müssen (es sei denn, Sie verwenden die Option -r) und ein Dateipfad in Anführungszeichen gesetzt werden muss, wenn er Leerzeichen enthält.
xargs stellt den Schalter -i bereit, um die Eingabe in den folgenden Befehl zu ersetzen , anstatt sie nur anzuhängen. Also würde ich den Vorschlag auf ändern
locate foobar | xargs -ixxx rm -f 'xxx'
Dies funktioniert nur, wenn die von locate zurückgegebenen Dateinamen Apostrophe enthalten.
Ich muss mit qbi übereinstimmen, dass Sie vorsichtig mit rm -f sein sollten ! Verwenden Sie das Flag -p, um xargs zu laden, oder führen Sie einfach die locate foobar selbst aus, bevor Sie xargs damit versorgen, oder lassen Sie -f von rm fallen.
locate foobar | xargs -p -ixxx rm -f 'xxx'
rm -i
locate fooBar``