Hitta filer som innehåller specifik text i Linux
Linux, oavsett vilken distro du använder, kommer med ett antal GUI-verktyg som tillåter sökning efter filer. Många moderna filhanterare stöder filsökning direkt i fillistan. Det finns dock ett antal situationer när du behöver använda konsolen, till exempel under en SSH-session eller när X-servern inte startar. Så här kan du snabbt hitta filer som innehåller specifik text med hjälp av terminalen.
Om du kan använda det grafiska användargränssnittet är det inget problem att söka efter filer. I min favorit-XFCE-skrivbordsmiljö tillåter Thunar-filhanteraren att söka efter filer genom att skriva filnamnet direkt i fillistan.
Men ingen av de filhanterare jag har provat tillåter sökning efter filinnehåll.
För att kringgå denna begränsning när du arbetar i en GUI-session kan du använda Сatfish. Сatfish är ett populärt sökverktyg. Det tillåter sökning efter filinnehåll. Du måste klicka på kugghjulsikonen och aktivera alternativet Sök filinnehåll.
Men när det kommer till terminalen kan du inte använda något grafiskt verktyg. Jag tycker också att Catfish inte är användbart och föredrar klassiska konsolverktyg framför det. Här är de metoder och verktyg jag använder.
För att hitta filer som innehåller specifik text i Linux, gör följande.
- Öppna din favoritterminalapp. XFCE4-terminal är min personliga preferens.
- Skriv följande kommando:
hitta ./ -typ f -exec grep -l "text att hitta" {} \;
- Detta kommer att skapa en lista över filer som innehåller den nödvändiga textdelen.
Kommandot find kommer att söka efter filer från den aktuella katalogen, "./". Du kan ange önskad sökväg istället.
Alternativet -typ f säger åt den att endast söka efter filer och utesluta kataloger. Du kan också få den att endast söka efter en viss filtyp genom att lägga till alternativet enligt följande:hitta ./ -typ f -iname "*.txt" -exec grep -l "text att hitta" {} \;
Se följande skärmdump:
De -exec option anropar grep-verktyget för var och en av de matchande filerna för att kontrollera deras innehåll. Om texten hittas i filen kommer dess namn att läggas till utdata, tack vare -l alternativ.
Alternativ
Det finns alternativ till metoderna som beskrivs ovan. Först och främst kan du bara använda grep verktyg. Prova följande kommando:
grep -iRl "text att hitta" ./
- -i står för ignore text case.
- -R står för rekursiv filbehandling.
- -l står för "visa filnamnet, inte själva resultatet".
Som du kan se är denna metod mindre flexibel än hitta kommando.
Midnattschef
En annan metod som jag ofta använder är Midnight Commander (mc), konsolfilhanterarens app. Till skillnad från find eller grep ingår inte mc som standard i alla Linux-distros jag har provat. Du kan behöva installera den själv.
För att hitta filer som innehåller viss text med hjälp av Midnight Commander, starta appen och tryck på följande sekvens på tangentbordet:
Alt + Flytta + ?
Detta öppnar sökdialogrutan.
Fyll i avsnittet "Filnamn:". Du kan ange något som "*.txt" för att endast söka efter din text i textfiler.
Fyll nu i Innehåll: låda. Skriv texten som filerna innehåller och tryck på Enter-tangenten.
Den kommer att hitta alla filer som matchar kriterierna.
Det är allt.