Hoe kan ik recursief alle bestanden in huidige en submappen vinden op basis van jokertekens?

Hoe kan ik recursief alle bestanden in huidige en submappen vinden op basis van jokertekens?


Antwoord 1, autoriteit 100%

Gebruik daarvoor find:

find . -name "foo*"

findheeft een startpunt nodig, en de .(punt) verwijst naar de huidige directory.


Antwoord 2, autoriteit 8%

Het is vaak handiger om de vondst in grep te steken; het geeft je de volledige kracht van reguliere expressies voor het willekeurig matchen van jokertekens.

Bijvoorbeeld om alle bestanden te vinden met de hoofdletterongevoelige tekenreeks “foo” in de bestandsnaam:

~$ find . -print | grep -i foo

Antwoord 3, autoriteit 5%

findvindt alle bestanden die overeenkomen met een patroon:

find . -name "*foo"

Als je echter een foto wilt:

tree -P "*foo"

Hopelijk helpt dit!


Antwoord 4, autoriteit 2%

fd

In het geval dat findte traag is, probeer dan het hulpprogramma fd– een eenvoudig en snel alternatief voor findgeschreven in Rust.

Syntaxis:

fd PATTERN

Demo:

Startpagina: https://github.com/sharkdp/fd


Antwoord 5, autoriteit 2%

find -L . -name "foo*"

In een paar gevallen heb ik de parameter -L nodig gehad om symbolische directorykoppelingen af ​​te handelen. Symbolische links worden standaard genegeerd. In die gevallen was het nogal verwarrend omdat ik de directory naar een subdirectory zou veranderen en het bestand zou zien overeenkomen met het patroon, maar vond de bestandsnaam niet terug. Het gebruik van -L lost dat probleem op. De symbolische koppelingsopties voor zoeken zijn -P -L -H


Antwoord 6

Als je shell een nieuwe globbing-optieondersteunt (kan worden ingeschakeld door: shopt -s globstar), kunt u gebruiken:

echo **/*foo*

om bestanden of mappen recursief te vinden. Dit wordt ondersteund door Bash 4, zsh en soortgelijke shells.


Persoonlijk heb ik deze shell-functie gedefinieerd:

f() { find . -name "*$1*"; }

Opmerking: bovenstaande regel kan rechtstreeks in de shell worden geplakt of worden toegevoegd aan het ~/.bashrc-bestand van uw gebruiker.

Dan kan ik naar bestanden zoeken door te typen:

f some_name

Als alternatief kunt u een fdhulpprogrammagebruiken met een eenvoudige syntaxis, b.v. fd pattern.


Antwoord 7

find <directory_path>  -type f -name "<wildcard-match>"

In de wildcard-match kunt u de string opgeven die u wilt matchen, b.v. *.c (voor alle c-bestanden)


Antwoord 8

U kunt gebruiken:

# find . -type f  -name 'text_for_search'

Als je REGX wilt gebruiken, gebruik dan -iname

# find . -type f  -iname 'text_for_search'

Antwoord 9

Het volgende commando toont alle bestanden met de exacte naam “patroon” (bijvoorbeeld) in de huidige en zijn submappen.

find ./ -name "pattern"


Antwoord 10

voor zoeken naar bestanden

find / -xdev -name settings.xml–> hele computer

find ./ -xdev -name settings.xml–> huidige map & zijn subdirectory

voor bestanden met extensietype

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

Antwoord 11

Standaard manier om naar recursieve bestanden te zoeken, en in de meeste gevallen beschikbaar is

find . -name "filepattern"

Het begint recursief te zoeken naar bestandsnaam of patroon vanuit de huidige map waarin u zich bevindt. Met de opdracht find kunt u jokertekens en verschillende schakelaars gebruiken om de volledige lijst met opties te zien, typt u

man find

of als man-pagina’s niet beschikbaar zijn op uw systeem

find --help

Er zijn echter modernere en snellere tools dan te vinden, die je hele bestandssysteem doorkruisen en je bestanden indexeren. Een zo’n veelgebruikte tool is lokaliseren of slocate/mlocate, je moet de handleiding van je besturingssysteem raadplegen over hoe je het moet installeren, en als het eenmaal is geïnstalleerd, moet het de database starten, als het installatiescript het niet voor u doet, kan het handmatig worden gedaan door te typen

sudo updatedb

En om het te gebruiken om naar een bepaald bestandstype te zoeken

locate filename

Of om te zoeken naar bestandsnaam of patter vanuit de huidige map, typt u:

pwd | xargs -n 1 -I {} locate "filepattern"

Het zal zijn database met bestanden doorzoeken en snel padnamen afdrukken die overeenkomen met het patroon dat u hebt getypt.
Om de volledige lijst met lokaliseringsopties te zien, typt u:
locate --helpof man locate

Bovendien kun je location configureren om de database op geplande tijden bij te werken via cron job, dus voorbeeld cron welke updates db om 1AM eruit zou zien:

0 1 * * * updatedb

Deze cron-taken moeten door root worden geconfigureerd, aangezien updatedb root-rechten nodig heeft om het hele bestandssysteem te doorkruisen.


Antwoord 12

Gebruik

find path/to/dir -name "*.ext1" -o -name "*.ext2"

Uitleg

  1. De eerste parameter is de map waarin u wilt zoeken.
  2. Standaard doet findrecursie.
  3. De -ostaat voor -or. Dus hierboven betekent zoeken naar dit jokerteken OF deze. Als je maar één patroon hebt, hoef je -oniet te gebruiken.
  4. De aanhalingstekens rond het jokerteken zijn verplicht.

Antwoord 13

Het verbaast me dat lokaliseren niet veel wordt gebruikt als we recursief moeten gaan.

Ik zou eerst “$PWD” lokaliseren om de lijst met bestanden in de huidige map van interesse te krijgen, en er vervolgens greps op uitvoeren zoals ik wil.

locate "$PWD" | grep -P <pattern>

Natuurlijk wordt ervan uitgegaan dat de updatedb is voltooid en dat de index periodiek wordt bijgewerkt. Dit is een veel snellere manier om bestanden te vinden dan om een ​​zoekopdracht uit te voeren en te vragen om door de boom te gaan. Voor de volledigheid nog even vermelden. Niets tegen het gebruik van find, als de boom niet erg zwaar is.


Antwoord 14

Als u een speciaal bestand met jokertekens wilt doorzoeken, kunt u de volgende code gebruiken:

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

Stel dat u vanaf hier alle .conf-bestanden wilt doorzoeken:

.betekent dat de zoekopdracht is gestart vanaf hier (huidige plaats)
-typebetekent type zoekitem dat hier bestand (f) is.
-namebetekent dat je bestanden wilt zoeken met *.confnamen.


Antwoord 15

Het onderstaande commando helpt bij het zoeken naar bestanden

1) Ongeacht het geval
2) Resultaat Mappen uitsluiten zonder toestemming
3) Zoeken vanaf de root of vanaf het pad dat u leuk vindt. Verander / met het pad dat u verkiest.

Syntaxis:
vind -iname ” 2>&1 | grep -v “Toestemming geweigerd”

Voorbeeld

find / -iname ‘C*.xml’ 2>&1 | grep -v “Toestemming geweigerd”

find / -iname '*C*.xml'   2>&1 | grep -v "Permission denied"

Antwoord 16

Hiermee doorzoekt u alle gerelateerde bestanden in de huidige en subdirectory’s, waarbij hun aantal regels zowel afzonderlijk als volledig wordt berekend:

find . -name "*.wanted" | xargs wc -l

Antwoord 17

Met Python>3.5, met behulp van glob, .wijzend naar je huidige map en zoekend naar .txtbestanden:

python -c "import glob;[print(x) for x in glob.glob('./**/*txt', recursive=True)]"

Voor oudere versies van Python kunt u glob2

installeren

LEAVE A REPLY

Please enter your comment!
Please enter your name here

fifteen − fourteen =

Other episodes