Wyświetl wszystkie pliki / katalogi w bieżącym katalogu lub poniżej, które pasują do „filename”.
Bezpośrednim odpowiednikiem jest
find . -iname <filename>
która wyświetla listę wszystkich plików i katalogów wywoływanych <filename>
w bieżącym katalogu i wszystkich podkatalogach, ignorując wielkość liter.
Jeśli twoja wersja Find nie obsługuje -iname
, możesz -name
zamiast tego użyć . Pamiętaj, że w przeciwieństwie do -iname
, -name
rozróżniana jest wielkość liter.
Jeśli chcesz tylko wyświetlić listę nazwanych plików <filename>
, a nie katalogów, dodaj-type f
find . -iname <filename> -type f
Jeśli chcesz używać symboli wieloznacznych, musisz umieścić wokół nich cudzysłowy, np
find . -iname "*.txt" -type f
w przeciwnym razie powłoka ją rozwinie.
Jak zauważyli inni, możesz także:
find . | grep "\.txt$"
grep
wypisze linie na podstawie wyrażeń regularnych, które są potężniejsze niż symbole wieloznaczne, ale mają inną składnię.
Zobacz man find
i man grep
po więcej szczegółów.
<filename>
zawiera symbole wieloznaczne, użyj cudzysłowów wokół niego, npfind . -name '*.txt'
.<filename>
jako znacznika dla userinput jest złym nawykiem w środowisku wiersza poleceń, w którym przez< and >
większość czasu ma określone znaczenie. Sugeruję po prostu użyćfilename
, może FILENAME, aby to podkreślić. Większość ludzi zrozumie, a ci, którzy tego nie zrobią, mogą wyrządzić krzywdę, jeśli nie zrozumieją, że nie powinni uderzać mniej niż lub więcej niż znak.<filename>
jest konwencją w wielu dokumentacjach UNIX, więc myślę, że ludzie powinni być tego świadomi, ale zgadzam się,FILENAME
że może być łatwiejszy do zrozumienia.find -iname <filename>
jest lepszy, ponieważ nie uwzględnia wielkości liter, jak DOSNiektóre pociski pozwalają
ls **/filename
, co jest dość wygodne.źródło
shopt -s globstar; echo **/filename
jest równoważne zfind . -name "filename"
. Działa również w Zsh.shopt -s globstar
, prawdopodobnie zadziała dla Ciebie. Globowanie rekurencyjne jest funkcją dostępną tylko w niektórych powłokach, a czasem nie jest domyślnie włączona.shopt
polecenie włącza opcjęglobstar on
. Teraz działa jak urok. Wielkie dzięki.Możesz to zrobić za pomocą
źródło
find . -regextype posix-egrep -regex '.*filename.*'
(nie wiem, czy taegrep
część jest ważna, ale użyłeś jejegrep
w odpowiedzi, więc jągrep
używa wyrażeń regularnych, podczas gdy polecenie DOS używa symboli wieloznacznych powłoki.find . -name "*.*"
nie zrobi tego, czego można oczekiwać od tła DOS. Globy są jednak wystarczająco blisko, aby można je było rozpoznać, podczas gdy wyrażenia regularne są zupełnie nową bestią.*.*.*
w nowoczesnym systemie dos, np. Windows cmd? Co*.*.*.*
?Może to być również:
tree -if </your/path>
lub'pwd'
ścieżkaźródło