Powiedzmy, że istnieją pliki o nazwach:
batman.c
debate.c
cricketbat.c
Jakiego polecenia i jak go użyć, aby wyświetlić listę wszystkich tych plików za pomocą tagu wyszukiwania bat
?
Powiedzmy, że istnieją pliki o nazwach:
batman.c
debate.c
cricketbat.c
Jakiego polecenia i jak go użyć, aby wyświetlić listę wszystkich tych plików za pomocą tagu wyszukiwania bat
?
Odpowiedzi:
bat
dowolnym miejscuAby znaleźć wszystkie pliki w dowolnym miejscu, /path/to/folder
których nazwy zawierają bat
, możesz użyć:
find /path/to/folder -name '*bat*'
Mam cytowany wzór wyszukiwarki *bat*
, ponieważ jeśli cytaty zostały pominięte, a pliki są *bat*
w bieżącym katalogu, powłoka wzrośnie *bat*
do listy nich i przekazać , że do find
. Wtedy find
nie działałoby dobrze. ( \*bat\*
a "*bat*"
także praca.)
Aby wyszukać w folderze, w którym aktualnie się znajdujesz (np. W którym cd
edytujesz), użyj .
, jak zwykle:
find . -name '*bat*'
Aby przeszukać cały komputer, użyj/
. Aby przeszukać katalog domowy, użyj ~
lub pełną nazwę swojego katalogu domowego. ( Powłoka rozwija się~
do pełnej ścieżki katalogu domowego).
Jeśli chcesz wyszukiwać bez rozróżniania wielkości liter, aby dopasować pliki zawierające BAT
, bAt
itd., Użyj -iname
testu zamiast -name
testu:
find /path/to/folder -iname '*bat*'
Zauważyłem, że wszystkie twoje pliki kończą się .c
. Jeśli chcesz tylko znaleźć takie pliki, użyj:
find /path/to/folder -name '*bat*.c'
Zauważyłem, że wszystkie twoje nazwy plików mają bat
albo na samym początku, albo na końcu części poprzedzającej .c
przyrostek. Jeśli chcesz uniknąć pasujących plików embattled.c
, możesz użyć:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-o
jest operatorem lub .
Aby znaleźć tylko zwykłe pliki - a nie foldery, dowiązania symboliczne i specjalne węzły urządzeń - możesz użyć -type f
. Jest to często zalecane i czasami całkiem odpowiednie ... ale często nie to, czego naprawdę chcesz , szczególnie jeśli biegasz find
w celu samodzielnego sprawdzenia wyników. Gdybyś miał link symboliczny pasujący do twojego wyszukiwania, czy nie chciałbyś o tym wiedzieć?
Jeśli chcesz znaleźć zarówno zwykłe pliki, jak i dowiązania symboliczne, możesz użyć:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
To używa -o
operatora, a także nawiasów do grupowania (które muszą być cytowane, aby powłoka nie traktowała ich specjalnie; w przeciwnym razie pojawi się błąd składniowy).
Załóżmy jednak, że chcesz zobaczyć tylko dowiązania symboliczne, które ostatecznie wskazują na zwykły plik (a nie dowiązania symboliczne do katalogów, węzłów urządzeń itp.). To jest nawet jeszcze prostsze: użyj -xtype
zamiast -type
. Pod warunkiem, że nie korzystasz find
z -L
flagi, -xtype
w dowiązaniu symbolicznym testowany jest typ pliku, do którego prowadzi łącze.
find /path/to/folder -name '*bat*' -xtype f
Jeśli masz dowiązanie symboliczne do innego dowiązania symbolicznego do pliku, -xtype f
dopasuje je, mimo że jego bezpośrednim celem jest inne dowiązanie symboliczne, a nie zwykły plik. To jest prawie zawsze to, czego chcesz.
Często ludzie myślą, że chcą -type f
, ale tak naprawdę chcą -xtype f
.
find
domyślną akcją, jeśli jej nie określisz, jest -print
. Wszystkie podane powyżej polecenia są sobie równoważne z -print
tackami na końcu.
find
jest często używany do uruchamiania poleceń na podstawie znalezionych plików - często poleceń, które wprowadzają zmiany. Ale są też inne działania, których celem jest wyświetlanie wyników -print
. Szczególnie interesujące jest -ls
:
find /path/to/folder -name '*bat*' -ls
Daje to szczegółowe informacje o każdym pliku, w formacie wielokolumnowym, podobnym do (choć nie do końca takiego samego), jak to, co zobaczysz po uruchomieniu .ls file
Aby uzyskać więcej informacji o find
innych sposobach wyszukiwania plików, zobacz:
find
podręcznika , dostępna online lub uruchamiana man find
w terminalu.find
, locate
oraz xargs
użyteczności publicznej.-xtype
rada; być może ls *bat*
i -maxdepth
/ mindepth
są również warte wspomnienia.
ls
już, że koncentruje się na rekurencyjnym przypadku z find
tutaj. Oczywiście przydatna byłaby również szczegółowa odpowiedź obejmująca brak (lub mniej) rekurencyjną listę nazw plików pasujących do jakiegoś wzorca ( ls
i za find
pomocą -maxdepth
). Możesz opublikować taką odpowiedź!
Najłatwiej jest uruchomić
locate bat
W ten sposób możesz przeszukiwać cały komputer w poszukiwaniu plików zawierających „bat” w nazwie pliku
Aby odświeżyć listę plików na komputerze, uruchom
updatedb
Uruchom to polecenie, gdy ostatnio dodałeś nowe pliki do swojego konta
updatetdb
updatedb
był uruchamiany ręcznie lub automatycznie), sudo updatedb
najpierw trzeba je uruchomić, tak.
bat
.
find /
podczas locate
wyszukiwania w bazie danych, podczas gdy find
rekurencyjnie wyświetla listę, /
a następnie dopasowuje wyrażenie regularne.
Otwórz terminal i zmień katalogi na katalog, z którego chcesz rozpocząć wyszukiwanie, a następnie uruchom następującą komendę:
find . -name "*bat*" -type f
.
Uruchamia polecenie Znajdź z bieżącego katalogu. Dopasowuje ciąg i jest wielkość liter. ( Nie uwzględnia wielkości liter)
Do wyszukiwania tylko dla plików.-name
bat
-iname
-type f
Jeśli pliki znajdują się w bieżącym katalogu, użyj:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
Lub (aby mieć je wiersz po wierszu):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
Jeśli chcesz przeszukać system w poszukiwaniu tych plików, użyj:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
Chcesz użyć find
polecenia z -iname
opcją dopasowania nazwy pliku bez rozróżniania wielkości liter lub -name
opcją dopasowania nazwy pliku z rozróżnianiem wielkości liter . Oba pozwalają na użycie nazw symboli wieloznacznych. Aby znaleźć dowolne nazwy plików zawierające „nietoperz”, należy użyć:
find / -iname '*bat*'
Lub
find / -name '*bat*'
W *
oznacza „dowolny znak (s)”, więc poszukiwanie poszukuje bat
wszelkich znaków, w tym żaden, przed lub po nim. Do /
wyszukiwania z katalogu rekursywnie, można użyć .
która będzie wyszukiwać rekursywnie z bieżącego katalogu lub bezwzględną ścieżkę gdzie chcesz szukać od. Zobacz, jak szukać plików przy użyciu wyrażenia regularnego w skrypcie powłoki Linux
-type f
, co nie tylko wyklucza katalogi i często nie jest tym, czego użytkownicy naprawdę chcą .
Użyj starego dobrego find
.
find <path_for_search> -type f -iname "*bat*"
na przykład.:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
z man find
:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.