Muszę znaleźć obraz, powiedzmy ABC.jpg, który, jak wiem, zostanie programowo umieszczony w katalogu o nazwie ABC_MPSC. Próbowałem:
cd /
find . -name "ABC_MPSC/ABC.jpg"
Ale to nic nie zwraca (tak naprawdę wiem, gdzie jest ten, którego szukam, więc wiem, że istnieje). Czy istnieje polecenie find, które może pozwolić mi nie szukać ręcznie?
locate
, co powinno być znacznie szybsze, ale działa tylko wtedy, gdy plik już istniał podczasupdatedb
ostatniego uruchomienia.Odpowiedzi:
-path
Przydaje się predykat:POSIX opis do tego predykatu jest:
Powodem
-name "ABC_MPSC/ABC.jpg"
niepowodzenia jest-name
predykat:Innymi słowy,
-name
nigdy nie widzi katalogu bieżącej nazwy pliku, a jedynie samą nazwę pliku podstawowego (na przykład ABC.jpg).źródło
Dwa sposoby (oprócz używania
-path
):Poszukaj katalogu, a następnie wykryj plik:
To polega na
find
implementacji, aby rozwinąć{}
do bieżącej nazwy ścieżki znalezionego katalogu, nawet jeśli jest on połączony z/ABC.jpg
(nie jest to wymagane ). Można to również zapisać jakoWyszukaj plik, a następnie sprawdź jego nazwę katalogu nadrzędnego:
Obie te alternatywy byłyby wolniejsze niż użycie
-path
w sposób pokazany przez Jeffa. Zostawiam je tutaj jednak jako przykłady, ponieważ mogą być przystosowane do innych rzeczy.źródło