Zoek alle bestanden waarvan de naam string bevat

Ik heb gezocht naar een commando dat bestanden uit de huidige map terugstuurt die een string in de bestandsnaam bevatten. Ik heb locateen findcommando’s gezien die bestanden kunnen vinden die beginnen met iets first_word*of eindigen met iets *.jpg.

Hoe kan ik een lijst met bestanden retourneren die een string in de bestandsnaam bevatten?

Bijvoorbeeld, als 2012-06-04-touch-multiple-files-in-linux.markdowneen bestand was in de huidige map.

Hoe kan ik dit bestand en andere bestanden retourneren die de tekenreeks touchbevatten? Een commando gebruiken zoals find '/touch/'


Antwoord 1, autoriteit 100%

Gebruik find:

find . -maxdepth 1 -name "*string*" -print

Het zal alle bestanden in de huidige map vinden (verwijder maxdepth 1als je het recursief wilt) met “string” en zal het op het scherm afdrukken.

Als u een bestand met ‘:’ wilt vermijden, typt u:

find . -maxdepth 1 -name "*string*" ! -name "*:*" -print

Als je grepwilt gebruiken (maar ik denk dat het niet nodig is voor zover je de bestandsinhoud niet wilt controleren), kun je het volgende gebruiken:

ls | grep touch

Maar, ik herhaal, findis een betere en schonere oplossing voor uw taak.


Antwoord 2, autoriteit 4%

Gebruik grep als volgt:

grep -R "touch" .

-Rbetekent herhaling. Als je liever niet naar de subdirectories gaat, sla het dan over.

-ibetekent “negeer hoofdletters”. Misschien vind je dit ook het proberen waard.


Antwoord 3, autoriteit 2%

De optie -maxdepthmoet vóór de optie -namestaan, zoals hieronder.,

find . -maxdepth 1 -name "string" -print

Antwoord 4

find $HOME -name "hello.c" -print

Dit zal het hele $HOME(dwz /home/username/) systeem doorzoeken op bestanden met de naam “hello.c” en hun padnamen weergeven:

/Users/user/Downloads/hello.c
/Users/user/hello.c

Het komt echter niet overeen met HellO.Cof HellO.C. Overeenkomen is niet hoofdlettergevoelig, geef de optie -inameals volgt door:

find $HOME -iname "hello.c" -print

Voorbeelduitgangen:

/Users/user/Downloads/hello.c
/Users/user/Downloads/Y/Hello.C
/Users/user/Downloads/Z/HELLO.c
/Users/user/hello.c

Geef de optie -type fdoor om alleen naar bestanden te zoeken:

find /dir/to/search -type f -iname "fooBar.conf.sample" -print
find $HOME -type f -iname "fooBar.conf.sample" -print

De -inamewerkt op GNU of BSD (inclusief OS X) versie find commando. Als uw versie van de opdracht find -inameniet ondersteunt, probeer dan de volgende syntaxis met de opdracht grep:

find $HOME | grep -i "hello.c"
find $HOME -name "*" -print | grep -i "hello.c"

OF probeer

find $HOME -name '[hH][eE][lL][lL][oO].[cC]' -print

Voorbeelduitgangen:

/Users/user/Downloads/Z/HELLO.C
/Users/user/Downloads/Z/HEllO.c
/Users/user/Downloads/hello.c
/Users/user/hello.c

Antwoord 5

Als de tekenreeks aan het begin van de naam staat, kunt u dit doen

$ compgen -f .bash
.bashrc
.bash_profile
.bash_prompt

Antwoord 6

Een alternatief voor de vele oplossingen die al geboden zijn, is het gebruik van de glob **. Wanneer je bashgebruikt met de optie globstar(shopt -s globstar) of je maakt gebruik van zsh, dan kan hiervoor gewoon de glob **gebruiken.

**/bar

zoekt recursief in de directory naar bestanden met de naam bar(mogelijk inclusief het bestand barin de huidige directory). Merk op dat dit niet gecombineerd kan worden met andere vormen van globbing binnen hetzelfde padsegment; in dat geval keren de *operatoren terug naar hun gebruikelijke effect.

Merk op dat er een subtiel verschil is tussen zshen bashHIER. Terwijl bashSoft-links naar mappen, zshzal doorlopen. Hiervoor moet u de Glob gebruiken ***/IN zsh.


Antwoord 7

find / -exec grep -lR "{test-string}" {} \;

Antwoord 8

grep -R "somestring" | cut -d ":" -f 1

Other episodes