Skocz do zawartości

Bash - Operowanie Na Plikach Znalezionych Findem


Thamiar

Rekomendowane odpowiedzi

Mam problem.

Otóz linijka

find /root/serwer -name "*.b" -print

Wyswietla mi wszystkie pliki z zakonczeniem b i wyswietla je na ekranie.

Teraz chcialbym, by kazdy znaleziony plik *.b zawierajacy w sobie tekst "Updejt"

zostal poddany pewnej przeróbce. Niestety nie za bardzo mam pojecie jak to zrobic

find /root/serwer -name "*.b" -print -exec if[ "$(cat /root/serwer/*.B)" = "update" ] ; then (obróbka) fi

Oczywiscie zgodnie z oczekiwaniami nie zadzialalo ;) Próbowalem tez z xargsem, ale kiepsko wychodzi.

Móglby ktos jakos naprowadzic?

Pozdrawiam!

Odnośnik do komentarza
Udostępnij na innych stronach

grep jest na tyle fajnym narzędziem, że zwraca status 1, gdy nie było dopasowania, lub 0 - jeśli dopasowanie było.

Parametr -exec polecenia find wykonuje się tylko wtedy, jeśli wszystko, co jest na lewo od niego, zakończyło się sukcesem.

Możesz więc zrobić coś takiego:

find /root/serwer -name "*.b" -print -exec grep -q "update" "{}" \; -exec obrobka \;

 

Jak to działa? Najpierw find wyszukuje pliki o rozszerzeniu .b. Następnie wypisuje je (-print). Następnie wykonuje polecenie grep. Parametr -q jest parameterem grepa i oznacza on, że grep nie wypisuje nic na wyjście. Jedynie będziemy mieli informację czy ciąg znaków został znaleziony, czy nie. "{}" to jest miejsce, które find zastępuje nazwą pliku. Średnik \; (musi być escape'owany!) oznacza koniec parametrów dla -exec. Następnie jest kolejne -exec, które wykona się TYLKO wtedy, gdy poprzednie -exec zakończyło się sukcesem. Czyli może robić obróbkę.

Mam nadzieję, że wszystko jest jasne ;)

  • Upvote 1
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...