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*"
find
heeft 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%
find
vindt 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 find
te traag is, probeer dan het hulpprogramma fd
– een eenvoudig en snel alternatief voor find
geschreven 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 fd
hulpprogrammagebruiken 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 --help
of 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
- De eerste parameter is de map waarin u wilt zoeken.
- Standaard doet
find
recursie. - De
-o
staat voor-or
. Dus hierboven betekent zoeken naar dit jokerteken OF deze. Als je maar één patroon hebt, hoef je-o
niet te gebruiken. - 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)
-type
betekent type zoekitem dat hier bestand (f) is.
-name
betekent 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 .txt
bestanden:
python -c "import glob;[print(x) for x in glob.glob('./**/*txt', recursive=True)]"
Voor oudere versies van Python kunt u glob2
installeren