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.