Jestem na Ubuntu i chciałbym znaleźć wszystkie pliki w bieżącym katalogu i podkatalogach, których nazwa zawiera ciąg „John”. Wiem, że grep
może pasować do zawartości plików, ale nie mam pojęcia, jak go użyć z nazwami plików. Każda pomoc będzie mile widziana.
107
Odpowiedzi:
Użyj polecenia znajdź ,
źródło
#!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi
umożliwiłoby uruchomienieF search-string
jako idealnego skrótu[ -z "$1" ]
byłoby trochę lepiej.if [ -z ]
. Myślałem, że to byłby błąd składniowy, ale działa. Od teraz mogę uprościć część mojego kodu.Prawidłowa odpowiedź została już dostarczona, ale abyś nauczył się, jak sobie pomóc, pomyślałem, że wrzucę coś pomocnego w inny sposób; jeśli możesz podsumować to, co próbujesz osiągnąć jednym słowem, w systemie Linux jest bardzo dobra funkcja pomocy.
To powoduje wyświetlenie wszystkich poleceń, które mają wyszukiwane hasło w krótkim opisie. Zwykle jest duża szansa, że znajdziesz to, czego szukasz. ;)
Ten wynik może czasami być nieco przytłaczający i zalecałbym zawężenie go do plików wykonywalnych, a nie wszystkich dostępnych stron podręcznika, na przykład:
lub, jeśli chcesz również poszukać poleceń wymagających wyższych poziomów uprawnień, takich jak ten:
źródło
Plik
find
Polecenie zajmie dużo czasu, ponieważ skanuje prawdziwe plików systemu plików.Najszybszym sposobem jest użycie
locate
polecenia, które natychmiast da wynik:Jeśli polecenie nie zostanie znalezione, musisz zainstalować
mlocate
pakiet i uruchomićupdatedb
polecenie, aby przygotować bazę danych wyszukiwania po raz pierwszy.Więcej szczegółów tutaj: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab
źródło
użyj Ack to proste. po prostu wpisz
ack <string to be searched>
źródło
To bardzo proste rozwiązanie przy użyciu
tree
polecenia w katalogu, którego szukasz.-f
pokazuje pełną ścieżkę do pliku i|
służy do potokowania wyjścia drzewa dogrep
pliku zawierającego ciągfilename
w nazwie.źródło