W tej chwili robię to:
Krok 1:
locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
Krok 2:
Ręcznie usuń, kopiując i wklejając każdą linię.
rm /home/abc/fooBar
rm /home/abc/Music/fooBar
Jak to zrobić w jednym kroku? Coś jak
zlokalizuj fooBar> rm
Dzięki.
command-line
pipe
theTuxRacer
źródło
źródło
rm -i
zlokalizuj fooBar``Odpowiedzi:
Jak już wspomnieli inni faceci, xargs jest twoim przyjacielem. To naprawdę potężne narzędzie, a ja postaram się to wyjaśnić i przedstawić obejście dla zwykłej gotcha.
Xargs pobiera wiersz z wejścia i dołącza go do innego polecenia, wykonując to polecenie dla każdego wiersza na wejściu. Tak przez pisanie
locate foobar | xargs rm -f
, wyjście polecenia zlokalizowania zostaną poprawione na końcu tegorm -f
polecenia i wykonywane dla każdej linii produkowanych przezlocate foobar
.Gotcha:
Ale co, jeśli w linii (liniach) są spacje zwrócone przez locate? To złamie
rm -f
polecenie, ponieważ argumenty przekazywane do rm muszą być plikami (chyba że użyjesz przełącznika -r), a ścieżka do pliku musi być zmieniona lub cytowana, jeśli zawiera spacje.xargs udostępnia przełącznik -i, który zastępuje dane wejściowe w następującym po nim poleceniu, a nie tylko dołącza je. Więc zmienię sugestię na
który teraz się zepsuje tylko wtedy, gdy nazwy plików zwrócone przez locate zawierają apostrofy.
Muszę zgodzić się z qbi, że powinieneś być ostrożny przy używaniu rm -f ! Użyj flagi -p, aby xargs, lub po prostu uruchom sam lokalizuj foobar przed podaniem go do xargs, lub upuść -f z rm.
źródło
-0
(--null
) do zlokalizowania i xargs. Wykorzystuje bezpieczny znak ASCII NUL do oddzielania nazw plików:locate -0 foobar | xargs -0 rm
Być może potrzebujesz więcej opcji do użycia z
xargs
. Najpierw przetestuj za pomocąxargs -p
. Jeśli jest OK, usuń-p
opcję:źródło
Aby usunąć wszystkie pliki zwrócone przez lokalizację, wydaj następujące polecenie w swoim terminalu
locate foobar | xargs rm -f
źródło