Ho provato a correre
locate *.orig | xargs rm
ma diceva No such file or directory
Ho visto dei modi per farlo, find
ma Locate restituisce il percorso completo dell'oggetto quindi dovrebbe essere possibile
Ho provato a correre
locate *.orig | xargs rm
ma diceva No such file or directory
Ho visto dei modi per farlo, find
ma Locate restituisce il percorso completo dell'oggetto quindi dovrebbe essere possibile
Risposte:
Se i nomi dei file contengono spazi che dovresti usare
locate -0 $something | xargs -0 rm
Dalla locate
pagina man :
-0
,--null
Separare le voci nell'output utilizzando il carattere ASCII NUL anziché scrivere ciascuna voce su una riga separata. Questa opzione è progettata per l'interoperabilità con l'opzione --null di GNU xargs (1).
o
locate $something | while read f; do rm "$f"; done
Inoltre, dovresti proteggere *.orig
con le virgolette, per evitare l'espansione della shell e passarlo per localizzarlo intatto.
| while read
poiché la mia directory home è piena di file con spazi.
*.orig
, la shell espande il modello a, diciamo file1.orig file2.orig ...
, in modo che locate
non vedrà la stringa esatta *.orig
come dovrebbe.
tr '\n' '\0'
.
Non lo xargs
èxarg
Il comando locate *.orig | xargs rm
funziona davvero, ma quello che stava succedendo era che locate
stava trovando i *.orig
file nel cestino e rm
sputava l'errore No such file or directory
quando si cercava di eliminare i file nel cestino.
individuare non fa tremare, ma lo fa la shell. La shell espande * .orig a ciò che trova nella directory corrente che corrisponde a * .orig.
Basta usare
locate .orig
e se questo ti procura ciò di cui hai bisogno
locate .orig | xargs rm
o, come menzionato da enzotib
locate -0 .orig | xargs -0 rm
se hai spazi bianchi nei nomi dei file.
Un trucco: salva tutti i percorsi nel file tmp. quindi, Loop su di esso:
#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
pth=$line
rm "$pth"
done < /tmp/tmp.txt
rm -rf /tmp/tmp.txt