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, find
aber 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, find
aber 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 locate
Manpage :
-0
,--null
Trennen 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 *.orig
mit Anführungszeichen schützen , um die Shell-Erweiterung zu vermeiden, und sie an unberührte Stellen weitergeben.
| while read
da mein Home-Verzeichnis voller Dateien mit Leerzeichen ist.
*.orig
, erweitert die Shell das Muster beispielsweise auf file1.orig file2.orig ...
, sodass locate
die genaue Zeichenfolge nicht *.orig
wie gewünscht angezeigt wird .
tr '\n' '\0'
.
Es ist xargs
nichtxarg
Der Befehl locate *.orig | xargs rm
funktioniert tatsächlich aber was geschieht , dass locate
war die Suche nach *.orig
Dateien in dem Papierkorb und rm
spuckt den Fehler No such file or directory
bei 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