Linux znajduje nazwy plików z podanym ciągiem


107

Jestem na Ubuntu i chciałbym znaleźć wszystkie pliki w bieżącym katalogu i podkatalogach, których nazwa zawiera ciąg „John”. Wiem, że grepmoż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.


Odpowiedzi:


195

Użyj polecenia znajdź ,

find . -type f -name "*John*"

1
Utworzenie niestandardowego skryptu bash za pomocą #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi umożliwiłoby uruchomienie F search-stringjako idealnego skrótu
Ilia Rostovtsev

@IliaRostovtsev - fajnie, ale [ -z "$1" ]byłoby trochę lepiej.
Joe

@Joe Ah, racja. Masz na myśli na wypadek, gdyby ścieżka miała spacje? Ale tutaj sprawdzamy tylko, czy istnienie 1 $ miejsca spowoduje pojawienie się 2 $ i to wszystko. Masz na myśli to, że teoretycznie jest lepiej, prawda?
Ilia Rostovtsev

@IliaRostovtsev - Właściwie to się myliłem. Jeśli $ 1 jest zerowe, test staje się if [ -z ]. Myślałem, że to byłby błąd składniowy, ale działa. Od teraz mogę uprościć część mojego kodu.
Joe

25

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.

man -k <your search term>

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:

man -k find | egrep '\(1\)'

lub, jeśli chcesz również poszukać poleceń wymagających wyższych poziomów uprawnień, takich jak ten:

man -k find | egrep '\([18]\)'

3
Jestem ciekawy ... pytanie, które nie wskazuje na żadną próbę rozwiązania problemu za pomocą wyszukiwania, zyskuje pozytywny głos, przyjazne wyjaśnienie, jak dowiedzieć się o możliwych poleceniach, zostaje zdeptane. Jakie są kryteria? :)
tink

1
Głosowałem za tobą. lekcja jest niewielka. ale możemy zobaczyć próbki i dostosować :)
tgkprog

2

Plik findPolecenie zajmie dużo czasu, ponieważ skanuje prawdziwe plików systemu plików.

Najszybszym sposobem jest użycie locatepolecenia, które natychmiast da wynik:

locate "John"

Jeśli polecenie nie zostanie znalezione, musisz zainstalować mlocatepakiet 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



1

To bardzo proste rozwiązanie przy użyciu treepolecenia w katalogu, którego szukasz. -fpokazuje pełną ścieżkę do pliku i |służy do potokowania wyjścia drzewa do greppliku zawierającego ciąg filenamew nazwie.

tree -f | grep filename
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.