it-swarm.com.de

Leiten Sie die Ergebnisse von locate in rm

Ich habe versucht zu rennen

locate *.orig | xargs rm

aber es sagte No such file or directory

Ich habe Möglichkeiten gesehen, dies mit find zu tun, aber locate gibt den vollständigen Pfad zum Objekt zurück, sodass dies möglich sein sollte

10
soldier.moth

Wenn Dateinamen Leerzeichen enthalten, sollten Sie verwenden

locate -0 $something | xargs -0 rm

Von locate Manpage :

-0, --null Trennen Sie die Einträge bei der Ausgabe mit dem Zeichen ASCII NUL, anstatt jeden Eintrag in eine separate Zeile zu schreiben. Diese Option wurde für die Interoperabilität mit der Option --null von GNU xargs (1) entwickelt.

oder

locate $something | while read f; do rm "$f"; done

Außerdem sollten Sie *.orig mit Anführungszeichen schützen, um die Shell-Erweiterung zu vermeiden, und sie an einen unberührten Ort übergeben.

20
enzotib

Es ist xargs nicht xarg

2
maco

Der Befehl locate *.orig | xargs rm funktioniert tatsächlich, aber es ist passiert, dass locate*.orig Dateien im Papierkorb gefunden hat und rm beim Versuch den Fehler No such file or directory ausspuckt um Dateien im Papierkorb zu löschen.

0
soldier.moth

locate führt das Globbing nicht aus, die Shell jedoch. Die Shell erweitert * .orig auf das, was sie im aktuellen Verzeichnis findet, das mit * .orig übereinstimmt.

Benutz einfach

locate .orig

und wenn das dir das bringt was du brauchst

locate .orig | xargs rm

oder, wie Enzotib erwähnt

locate -0 .orig | xargs -0 rm

wenn Sie Whitespace in den Dateinamen haben.

0
user unknown

Ein Trick: Speichern Sie alle Pfade in der tmp-Datei. dann Loop drauf:

#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
    pth=$line
    rm "$pth" 
done < /tmp/tmp.txt

rm -rf /tmp/tmp.txt 
0
Abdennour TOUMI