Ich habe versucht zu rennen
locate *.orig | xargs rm
aber es sagte No such file or directory
Ich habe Möglichkeiten gesehen, dies zu tun, findaber find gibt den vollständigen Pfad zum Objekt zurück, sodass dies möglich sein sollte
Ich habe versucht zu rennen
locate *.orig | xargs rm
aber es sagte No such file or directory
Ich habe Möglichkeiten gesehen, dies zu tun, findaber find gibt den vollständigen Pfad zum Objekt zurück, sodass dies möglich sein sollte
Antworten:
Wenn Dateinamen Leerzeichen enthalten, sollten Sie diese verwenden
locate -0 $something | xargs -0 rm
Von der locateManpage :
-0,--nullTrennen Sie die Einträge bei der Ausgabe mit dem ASCII-NUL-Zeichen, 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 *.origmit Anführungszeichen schützen , um die Shell-Erweiterung zu vermeiden, und sie an unberührte Stellen weitergeben.
| while readda mein Home-Verzeichnis voller Dateien mit Leerzeichen ist.
*.orig, erweitert die Shell das Muster beispielsweise auf file1.orig file2.orig ..., sodass locatedie genaue Zeichenfolge nicht *.origwie gewünscht angezeigt wird .
tr '\n' '\0'.
Es ist xargsnichtxarg
Der Befehl locate *.orig | xargs rmfunktioniert tatsächlich aber was geschieht , dass locatewar die Suche nach *.origDateien in dem Papierkorb und rmspuckt den Fehler No such file or directorybei dem Versuch , Dateien in dem Papierkorb zu löschen.
lococate macht das Globbing nicht, aber die Shell. Die Shell erweitert * .orig auf das, was sie im aktuellen Verzeichnis findet, das mit * .orig übereinstimmt.
Benutz einfach
locate .orig
und wenn das dir 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.
Ein Trick: Speichern Sie alle Pfade in der tmp-Datei. dann Schleife 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