Nawet gdy /tmp
nie ma wywołanego pliku something
, wyszukiwanie go za pomocą find
zwróci 0:
$ find /tmp -name something
$ echo $?
0
Jak mogę uzyskać niezerowy status wyjścia, gdy find
niczego nie znajdziesz?
Oto jedna linijka, która moim zdaniem robi to, co chcesz:
find /tmp -name something | egrep '.*'
Status zwracany będzie, 0
gdy coś zostanie znalezione, a w przeciwnym razie niezerowy.
Jeśli musisz także uchwycić wyniki find
do dalszego przetwarzania, odpowiedź Svena to pokryła.
*
naegrep
regex jest całkowicie zbędne. Ponieważ nie używaszegrep
składni wyrażeń regularnych, zwykły starygrep
może być o kilka mikrosekund szybszy.find ... | read
Najprostsze rozwiązanie, które nie drukuje, ale wychodzi 0 po znalezieniu wyników
źródło
Wyjście 0 jest łatwe do znalezienia, wyjście> 0 jest trudniejsze, ponieważ zwykle dzieje się tak tylko z błędem. Jednak możemy to zrobić:
źródło
find
nie zależy od kodów wyjścia-exec
uruchomionych przez niego programów .exec
sekcji, a nie pod wartością zwracaną). Nie potrafi rozróżnić niczego, co nie zostało znalezione, i popełnił błąd (np. Gdy został wywołany w nieistniejącym punkcie początkowym).Po znalezieniu tego pytania podczas próby rozwiązania problemu z Puppet (zmiana uprawnień do folderów w katalogu, ale nie do samego katalogu), wydaje się, że działa:
Mój konkretny przypadek użycia jest następujący:
Który zakończy kod 1, jeśli polecenie find nie znajdzie plików z wymaganymi uprawnieniami.
źródło
To nie jest możliwe. Znajdź zwraca 0, jeśli zakończy się pomyślnie, nawet jeśli nie znalazł pliku (co jest poprawnym wynikiem, nie oznacza błędu, gdy plik rzeczywiście nie istnieje).
Cytując znalezioną stronę podręcznika
W zależności od tego, co chcesz osiągnąć, możesz spróbować znaleźć
-print
nazwę pliku i przetestować na podstawie wyniku:źródło
exec
/execdir
(używane z+
):If any invocation returns a non-zero value as exit status, then find returns a non-zero exit status.
Uważam, że jest to najbardziej zwięzła i bezpośrednia metoda:
źródło
-print -quit
, co może rozwiązać problem.Oto mały skrypt, który zadzwoniłem
test.py
. Poprawia inne metody zamieszczone w tym, że zwróci kod błędu, jeśli jest ustawiony, a dodatkowo ustawia jeden, jeśli find nie wyświetlał żadnych plików:Oto wynik działania wiersza polecenia:
Następnie, aby uzyskać wynik, w którym znaleziono błędy, ale znaleziono pliki:
Następnie, jeśli chcesz listę plików, możesz skorzystać z
-print 0
przekazanejfind
i podzielić zmienną out na wartości null lub możesz po prostu dodać dla niej instrukcję print.źródło
Nie tylko
find
zwraca kody stanu wyjścia jako zero, gdy się powiedzie. W unixie, cokolwiek polecenie, które wykonasz, jeśli się powiedzie, to zwraca status wyjścia jako zero.źródło