locate filename
find -name '*filename*'
echo **/*filename*
ls -ld **/*filename*
(Czytaj dalej, aby zapoznać się z głównymi warunkami. Przeczytaj instrukcję dokładnego drukowania.)
Wyświetlanie zawartości katalogu jest swego rodzaju dodatkową funkcją ls
. Głównym zadaniem tego ls
, który zajmuje większość jego złożoności, jest dopracowanie wyświetlacza. (Spójrz na instrukcję i porównaj liczbę opcji związanych z wyborem plików do wyświetlenia w porównaniu z liczbą opcji, które kontrolują, jakie informacje mają być wyświetlane o każdym pliku i jak formatowany jest ekran. Jest to prawdą zarówno dla GNU ls, które „ Znajdę na Linuksie i innych systemach z mniejszą liczbą opcji, od wczesnych dni).
Domyślnym trybem ls
jest to, że kiedy przekazujesz mu katalog, wyświetla on pliki w tym katalogu. Jeśli przekażesz mu dowolny inny typ pliku (zwykły plik, symboliczne łącze itp.), Wyświetla tylko ten plik. (Dotyczy to każdego argumentu osobno.) Opcja -d
mówi, ls
aby nigdy nie schodzić do katalogu.
ls
ma opcję, -R
która każe rekursywnie wyświetlać katalogi. Ale ma ograniczone zastosowanie i nie pozwala na wiele filtrowania na wyjściu.
Pierwszym narzędziem do wykonania dopasowania wzorca jest sama powłoka. Nie potrzebujesz żadnych innych poleceń: po prostu wpisz symbole wieloznaczne i gotowe. Jest to znane jako globbing .
echo *filename*
Tradycyjnie symbole wieloznaczne były ograniczone do bieżącego katalogu (lub wskazanego katalogu:) echo /some/where/*filename*
. *
Dopasowuje dowolną nazwę pliku, lub jakiejkolwiek części nazwy pliku, ale *.txt
nie będzie pasował foo/bar.txt
. Nowoczesne powłoki dodały wzorzec, **/
który oznacza „w tym katalogu lub w dowolnym katalogu poniżej (rekurencyjnie)”. W przypadku bash, ze względu na historyczną zgodność, ta funkcja musi być wyraźnie włączona za pomocą shopt -s globstar
(możesz umieścić tę linię w swoim ~/.bashrc
).
echo **/*filename*
echo
Komenda tylko echa listę nazw plików generowanych przez plecy powłoki na ciebie. Jako wyjątek, jeśli w ogóle nie ma pasującej nazwy pliku, wzór wieloznaczny pozostanie niezmieniony w bash (chyba że ustawisz shopt -s nullglob
, w którym to przypadku wzorzec rozwija się do pustej listy), a zsh sygnalizuje błąd (chyba że ustawisz setopt nullglob
lub setopt no_no_match
co powoduje, że wzór pozostaje niezmieniony).
Nadal możesz chcieć używać ls
jego opcji. Na przykład ls
może wskazywać charakter lub uprawnienia pliku (katalog, plik wykonywalny itp.) Za pomocą kolorów. Możesz wyświetlić datę, rozmiar i własność pliku za pomocą ls -l
. Więcej instrukcji znajdziesz w instrukcji.
Tradycyjne polecenie szukania pliku w drzewie katalogów to find
. Zawiera wiele opcji kontrolowania, które pliki mają być wyświetlane i co z nimi zrobić. Na przykład, aby wyszukać pliki, których nazwa pasuje do wzorca *filename*
w bieżącym katalogu i jego podkatalogach i wydrukować ich nazwy:
find /some/dir -name '*filename*' -print
-print
jest akcją (większość innych akcji polega na wykonaniu polecenia z pliku); -print
sugeruje się, że jeśli nie podejmiesz akcji . Ponadto, jeśli nie określisz żadnego katalogu do przejścia ( /some/dir
powyżej), domyślny jest katalog bieżący. Warunek -name '*filename'
mówi, aby wyświetlać (lub działać) tylko pliki, których nazwa pasuje do tego wzorca; istnieje wiele innych filtrów, na przykład -mtime -1
pasujących do plików zmodyfikowanych w ciągu ostatnich 24 godzin. Czasami można pominąć cytaty -name '*filename*'
, ale tylko wtedy, gdy symbol wieloznaczny nie pasuje do żadnego pliku w bieżącym katalogu (patrz wyżej). Podsumowując, krótka forma jest
find -name '*filename*'
Innym przydatnym narzędziem, gdy znasz (część) nazwę pliku, jest locate
. To narzędzie sprawdza bazę danych nazw plików. W typowych systemach jest odświeżany co noc. Zaletą locate
przejęcia find /
jest to, że dużo szybciej. Minusem jest to, że jego informacje mogą być nieaktualne. Istnieje kilka implementacji locate
różniących się zachowaniem w systemach wieloużytkownikowych: locate
program podstawowy indeksuje tylko pliki czytelne publicznie (możesz uruchomić kompan, updatedb
aby utworzyć drugą bazę danych, która indeksuje wszystkie pliki na koncie); istnieją inne wersje (mlocate, slocate), które indeksują wszystkie pliki, a locate
program filtruje bazę danych, aby zwracać tylko te pliki, które widzisz.
locate filename
Czasami myślisz, że plik jest dostarczany przez pakiet w twojej dystrybucji, znasz (część) nazwę pliku, ale nie nazwę pakietu, i chcesz zainstalować pakiet. Wiele dystrybucji zapewnia do tego narzędzie. Na Ubuntu to jest apt-file search filename
. Aby uzyskać równoważne polecenia w innych systemach, sprawdź Pacman Rosetta .
ls
?