Im Moment ist es was ich tue:
Schritt 1:
locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
Schritt 2:
Führen Sie manuell eine Entfernung durch, indem Sie jede Zeile kopieren und einfügen.
rm /home/abc/fooBar
rm /home/abc/Music/fooBar
Wie mache ich das in einem Schritt? Etwas wie
Suchen Sie fooBar> rm
Vielen Dank.
command-line
pipe
theTuxRacer
quelle
quelle
rm -i
locate fooBar``Antworten:
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 desrm -f
Befehls angehängt und für jede von erzeugte Zeile ausgeführtlocate 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
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.
quelle
-0
(--null
) verwenden, um nach xargs zu suchen. Hierbei wird das sichere ASCII-NUL-Zeichen zum Trennen von Dateinamen verwendet:locate -0 foobar | xargs -0 rm
Möglicherweise benötigen Sie weitere Optionen zur Verwendung mit
xargs
. Testen Sie es zuerst mitxargs -p
. Wenn es in Ordnung ist, entfernen Sie die-p
Option:quelle
Geben Sie den folgenden Befehl in Ihrem Terminal ein, um alle von locate zurückgegebenen Dateien zu löschen
locate foobar | xargs rm -f
quelle