Wyniki wyszukiwania rurowego zlokalizuj w rm


11

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:


20

Jeśli nazwy plików zawierają spacje, których powinieneś użyć

locate -0 $something | xargs -0 rm

Ze locatestrony podręcznika :

-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.


Co rozumiesz przez „rozszerzenie powłoki”?
— soldier.moth

+1 za drugi przykład. Zawsze używam, | while readponieważ mój katalog domowy jest pełen plików ze spacjami.
— matpie

@ Soldier.moth: jeśli w bieżącym folderze znajdują się pliki odpowiadające wzorowi *.orig, powłoka rozwinie wzór do, powiedzmy file1.orig file2.orig ..., tak, locateaby nie widział dokładnie takiego ciągu, *.origjak powinien.
— enzotib

Aby grep zlokalizować wyjście, możesz wtedy tr '\n' '\0'.
— Pablo Bianchi,

2

To xargsniexarg


To właśnie miałem na myśli wpisanie pytania z pamięci, dziękuję.
— soldier.moth

No dobrze Wyglądało to na błąd, który pojawiał się po wprowadzeniu niepoprawnego polecenia
— maco

0

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.


Powinieneś dodać informacje jako „komentarz” do oryginalnej odpowiedzi lub możesz edytować oryginalną odpowiedź. To nie jest odpowiedź na twoje pytanie.
— enzotib

Jest to odpowiedź na moje pytanie, ponieważ przyczyną błędu był to, że lokalizator znajdował pliki * .orig w koszu i rm nie mógł ich usunąć. Zaakceptowałem twoją odpowiedź i głosowałem na obie odpowiedzi, ponieważ były one dobrze napisane i mogą pomóc komuś, kto przyjdzie później.
— soldier.moth

0

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.


0

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 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.