Próbowałem biec
locate *.orig | xargs rm
ale powiedział No such file or directory
Widziałem sposoby, aby to zrobić, findale funkcja locate zwraca pełną ścieżkę do obiektu, więc powinno to być możliwe
Próbowałem biec
locate *.orig | xargs rm
ale powiedział No such file or directory
Widziałem sposoby, aby to zrobić, findale funkcja locate zwraca pełną ścieżkę do obiektu, więc powinno to być możliwe
Odpowiedzi:
Jeśli nazwy plików zawierają spacje, których powinieneś użyć
locate -0 $something | xargs -0 rm
-0,--nullRozdziel wpisy na wyjściu za pomocą znaku NUL ASCII zamiast wpisywać każdy wpis w osobnym wierszu. Ta opcja została zaprojektowana pod kątem współdziałania z opcją --null GNU xargs (1).
lub
locate $something | while read f; do rm "$f"; done
Powinieneś również chronić się za *.origpomocą cudzysłowów, aby uniknąć rozszerzenia powłoki i przekazać go, aby zlokalizować nietknięty.
| while readponieważ mój katalog domowy jest pełen plików ze spacjami.
*.orig, powłoka rozwinie wzór do, powiedzmy file1.orig file2.orig ..., tak, locateaby nie widział dokładnie takiego ciągu, *.origjak powinien.
tr '\n' '\0'.
To xargsniexarg
Polecenie locate *.orig | xargs rmfaktycznie działa, ale działo się tak, że locateznajdowanie *.origplików w koszu i rmwyrzucanie błędu No such file or directorypodczas próby usunięcia plików w koszu.
locate nie wykonuje globowania, ale robi to powłoka. Powłoka rozwija * .orig do tego, co znajdzie w bieżącym katalogu, który pasuje do * .orig.
Po prostu użyj
locate .orig
a jeśli to zapewni ci to, czego potrzebujesz
locate .orig | xargs rm
lub, jak wspomniano enzotib
locate -0 .orig | xargs -0 rm
jeśli masz nazwy białych znaków w nazwach plików.
Sztuczka: Zapisz wszystkie ścieżki w pliku tmp. następnie zapętlić:
#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
pth=$line
rm "$pth"
done < /tmp/tmp.txt
rm -rf /tmp/tmp.txt