Rekursivt finne filer i gjeldende og underkataloger ved å bruke jokertegn på Linux

Shell

Effektiv filsøking i Linux

Når du arbeider med Linux, kan det være en vanlig og noen ganger kompleks oppgave å finne filer på tvers av kataloger. Bruk av rekursive søkemetoder og jokertegnsmatching kan effektivisere denne prosessen betydelig. Disse verktøyene er uvurderlige for både nybegynnere og avanserte brukere, og gjør filbehandlingen mer effektiv.

I denne veiledningen vil vi utforske hvordan du rekursivt finner alle filer i gjeldende katalog og dens underkataloger basert på spesifikke jokertegnmønstre. Enten du organiserer store datasett eller bare prøver å finne noen få filer, vil disse metodene forbedre kommandolinjekunnskapene dine.

Kommando Beskrivelse
find Søker etter filer og kataloger i kataloghierarkiet
-name Matcher filer etter navn ved hjelp av et jokertegnmønster
os.walk Genererer filnavnene i et katalogtre ved å gå enten ovenfra og ned eller nedenfra og opp
fnmatch.fnmatch Tester om et filnavn eller en streng samsvarer med et jokertegnmønster
param Definerer parametere for PowerShell-skript og funksjoner
Get-ChildItem Henter elementene på ett eller flere spesifiserte steder
-Recurse Instruerer kommandoen til å søke rekursivt gjennom kataloger
-Filter Filtrerer elementer ved hjelp av et jokertegn-uttrykk

Detaljert forklaring av rekursive filsøkeskripter

Det første skriptet bruker et skallskript for å finne filer i gjeldende katalog og dens underkataloger basert på et gitt jokertegnmønster. Det starter med en shebang for å spesifisere skriptets tolk. Skriptet sjekker deretter om brukeren oppga et jokertegnmønster som et argument ved å bruke if [ $# -eq 0 ]. Hvis ikke, ber den brukeren om riktig bruk og avslutter. Hvis et mønster er gitt, bruker skriptet kommandoen finn med alternativet -type f for å søke etter filer og -navn-alternativet for å matche jokertegnmønsteret. Kommandoen finn er svært effektiv for å søke etter filer rekursivt i Unix-baserte systemer. Skriptet avsluttes med exit 0 for å indikere vellykket utførelse.

Det andre skriptet er et Python-skript som også søker etter filer rekursivt basert på et jokertegnmønster. Det begynner med å importere modulene os og sys, som er nødvendige for å samhandle med operativsystemet og håndtere kommandolinjeargumenter. Skriptet sjekker om brukeren har oppgitt et jokertegnmønster; hvis ikke, skriver den ut riktig bruk og avsluttes. Ved å bruke os.walk kan skriptet krysse katalogtreet. For hver fil som blir funnet, sjekker fnmatch.fnmatch om filnavnet samsvarer med jokertegnmønsteret, og skriver ut de samsvarende filbanene. Dette skriptet er nyttig for brukere som foretrekker Python for skripting og trenger mer fleksibilitet og lesbarhet i koden.

Det tredje skriptet bruker PowerShell for å utføre en lignende oppgave på Windows-systemer. Skriptet bruker param-setningen for å definere en parameter for jokertegnmønsteret. Hvis mønsteret ikke er levert, ber det brukeren om riktig bruk. Get-ChildItem cmdleten, kombinert med -Recurse-flagget, henter gjenstander på spesifiserte steder rekursivt. Parameteren -Filter bruker jokertegnmønsteret for å matche spesifikke filer. Dette skriptet er ideelt for brukere som jobber i Windows-miljøer, og utnytter PowerShells kraftige og allsidige skriptfunksjoner for å administrere og søke etter filer effektivt.

Rekursivt filsøk ved hjelp av Finn-kommandoen

Shell-skripting i Linux

#!/bin/bash
# Script to recursively find files based on wildcard matching

# Check if the user has provided a wildcard pattern
if [ $# -eq 0 ]
then
  echo "Usage: $0 <wildcard-pattern>"
  exit 1
fi

# Find and print the files matching the pattern
find . -type f -name "$1"

exit 0

Python-skript for rekursivt filsøk

Python-skripting

import os
import sys

# Check if the user has provided a wildcard pattern
if len(sys.argv) != 2:
    print("Usage: python script.py <wildcard-pattern>")
    sys.exit(1)

# Get the wildcard pattern from the command line argument
pattern = sys.argv[1]

# Walk through the directory tree
for root, dirs, files in os.walk("."):
    for file in files:
        if fnmatch.fnmatch(file, pattern):
            print(os.path.join(root, file))

PowerShell-skript for rekursivt filsøk

PowerShell-skripting

# Check if the user has provided a wildcard pattern
param (
    [string]$pattern
)

if (-not $pattern) {
    Write-Host "Usage: .\script.ps1 -pattern '<wildcard-pattern>'"
    exit 1
}

# Get the files matching the pattern
Get-ChildItem -Recurse -File -Filter $pattern

Avanserte teknikker for rekursivt filsøk

I tillegg til de grunnleggende rekursive filsøkemetodene diskutert tidligere, er det flere avanserte teknikker som kan forbedre filsøkemulighetene dine på Linux. En slik metode innebærer å bruke kommandoen grep i kombinasjon med finn for å søke etter filer som inneholder spesifikke tekstmønstre. Du kan for eksempel bruke finn . -type f -name "*.txt" -exec grep "search_text" {} + for å finne alle tekstfiler som inneholder strengen "search_text". Dette er spesielt nyttig for utviklere og systemadministratorer som trenger å søke gjennom store kodebaser eller loggfiler effektivt.

Et annet kraftig verktøy for rekursive filsøk er fd, et enkelt, raskt og brukervennlig alternativ til finn. fd kommer med fornuftige standardinnstillinger og gir en intuitiv syntaks. For eksempel vil kommandoen fd "pattern" søke rekursivt etter filer som samsvarer med mønsteret, og den støtter regulære uttrykk som standard. I tillegg er fd raskere enn finn i mange scenarier på grunn av sin parallelliserte filsystemgjennomgang. For brukere som trenger avanserte søkefunksjoner med et brukervennlig grensesnitt, kan fd være et utmerket valg.

  1. Hvordan søker jeg etter filer med en bestemt utvidelse rekursivt?
  2. Bruk kommandoen finn . -type f -navn "*.extension" der "extension" er filtypen du leter etter.
  3. Kan jeg søke etter filer som er endret i løpet av de siste 7 dagene?
  4. Ja, bruk kommandoen finn . -type f -mtime -7 for å finne filer som er endret de siste 7 dagene.
  5. Hvordan ekskluderer jeg visse kataloger fra søket?
  6. Bruk alternativet -prune med finn for å ekskludere kataloger, f.eks. finn . -bane "./exclude_dir" -prune -o -type f -navn "*.txt" -print.
  7. Er det mulig å søke etter filer etter størrelse?
  8. Ja, bruk finn . -type f -størrelse +100M for å finne filer større enn 100MB.
  9. Hvordan søker jeg etter filer med navn som samsvarer med et regulært uttrykk?
  10. Bruk finn . -skriv f -regex ".*pattern.*" for å søke etter filer med navn som samsvarer med det regulære uttrykket.
  11. Kan jeg kombinere flere søkekriterier?
  12. Ja, du kan kombinere kriterier ved å bruke finn-alternativer, f.eks. finn . -type f -navn "*.txt" -størrelse +10M.
  13. Hvordan søker jeg etter skjulte filer rekursivt?
  14. Bruk finn . -skriv f -navn ".*" for å søke etter skjulte filer.
  15. Er det en måte å liste opp bare katalogene?
  16. Ja, bruk finn . -skriv d for å liste alle kataloger rekursivt.
  17. Hvordan kan jeg telle antall filer som er funnet?
  18. Legg til | wc -l til finn-kommandoen, f.eks. finn . -type f -navn "*.txt" | wc -l.
  19. Kan jeg begrense søkets dybde?
  20. Ja, bruk alternativet -maxdepth, f.eks. finn . -maxdepth 2 -type f for å begrense søket til 2 nivåer dypt.

Avanserte teknikker for rekursivt filsøk

I tillegg til de grunnleggende rekursive filsøkemetodene diskutert tidligere, er det flere avanserte teknikker som kan forbedre filsøkemulighetene dine på Linux. En slik metode innebærer å bruke kommando i kombinasjon med for å søke etter filer som inneholder spesifikke tekstmønstre. Du kan for eksempel bruke for å finne alle tekstfiler som inneholder strengen "search_text". Dette er spesielt nyttig for utviklere og systemadministratorer som trenger å søke gjennom store kodebaser eller loggfiler effektivt.

Et annet kraftig verktøy for rekursive filsøk er , et enkelt, raskt og brukervennlig alternativ til . kommer med fornuftige standardinnstillinger og gir en intuitiv syntaks. For eksempel kommandoen fd "pattern" vil rekursivt søke etter filer som samsvarer med mønsteret, og det støtter regulære uttrykk som standard. I tillegg, er raskere enn i mange scenarier på grunn av dens parallelliserte filsystemgjennomgang. For brukere som trenger avanserte søkefunksjoner med et brukervennlig grensesnitt, kan være et utmerket valg.

Siste tanker om rekursivt filsøk

Å mestre rekursivt filsøk i Linux er avgjørende for effektiv filbehandling, spesielt i komplekse katalogstrukturer. Ved å utnytte verktøy som , , og alternativer som , kan brukere forbedre produktiviteten betydelig. Å forstå og bruke disse kommandoene kan spare tid og forenkle oppgaver for både nybegynnere og erfarne brukere, noe som sikrer at det blir en enkel prosess å finne filer.