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 tego rm -f
polecenia i wykonywane dla każdej linii produkowanych przez locate 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
locate foobar | xargs -ixxx rm -f 'xxx'
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.
locate foobar | xargs -p -ixxx rm -f 'xxx'
rm -i
zlokalizuj fooBar``