Ho provato a correre
locate *.orig | xargs rm
ma diceva No such file or directory
Ho visto dei modi per farlo, findma 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, findma 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 locatepagina man :
-0,--nullSeparare 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 *.origcon le virgolette, per evitare l'espansione della shell e passarlo per localizzarlo intatto.
| while readpoiché la mia directory home è piena di file con spazi.
*.orig, la shell espande il modello a, diciamo file1.orig file2.orig ..., in modo che locatenon vedrà la stringa esatta *.origcome dovrebbe.
tr '\n' '\0'.
Non lo xargsèxarg
Il comando locate *.orig | xargs rmfunziona davvero, ma quello che stava succedendo era che locatestava trovando i *.origfile nel cestino e rmsputava l'errore No such file or directoryquando 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