Odpowiedzi:
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>
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 DOS
Niektóre pociski pozwalają ls **/filename
, co jest dość wygodne.
shopt -s globstar; echo **/filename
jest równoważne z find . -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ą
find . | egrep filename
find . -regextype posix-egrep -regex '.*filename.*'
(nie wiem, czy ta egrep
część jest ważna, ale użyłeś jej egrep
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
<filename>
zawiera symbole wieloznaczne, użyj cudzysłowów wokół niego, npfind . -name '*.txt'
.