Ik voer het volgende commando uit, maar het wordt niet recursief uitgevoerd:

find . -name *.java 

Ik weet dat er verderop in de huidige directory Java-bestanden zijn, maar het voert de find alleen uit op de huidige directory. Ik gebruik OS X, 10.9.

Antwoord

Het probleem is dat je je parameter. Doe dit in plaats daarvan:

find . -name "*.java" 

Uitleg

Zonder de aanhalingstekens, interpreteert de shell *.java als een glob-patroon en breidt het uit naar alle bestandsnamen die overeenkomen met de glob voordat het wordt doorgegeven naar find. Op deze manier, als u bijvoorbeeld foo.java in de huidige directory had, find “s eigenlijke commandoregel zou zijn:

find . -name foo.java 

die het bestand uiteraard alleen in de huidige directory zou vermelden (tenzij je toevallig een soortgelijk bestanden verderop in de boom).

Citeren voorkomt globale uitbreiding en geeft de opdrachtregel door aan find as-is.

Overigens, als de glob kwam niet overeen (geen *.java bestanden in de huidige map tory), zou je een van de twee gedragingen krijgen, afhankelijk van hoe je shell is ingesteld om klodders te verwerken die niet overeenkomen (dit wordt bepaald door de optie nullglob in Bash, bijvoorbeeld ):

  1. Als een glob die niet “niet overeenkomt” niet wordt uitgebreid door de shell, find zal (per ongeluk, let wel) correct gedrag vertonen.
  2. Als een glob die niet overeenkomt door de shell wordt uitgebreid tot een lege string, zal find klagen dat er een argument ontbreekt voor -name.

Antwoord

Ik had een vergelijkbare situatie waarin ik me bevond -name waarde tussen aanhalingstekens, maar kreeg nog steeds niet alle vind-hits waar ik op hoopte. Ik vermoedde dat het kwam door symlinks en dat was inderdaad het geval. Als u zoeken wilt forceren om door symlinks te zoeken, kunt u de opdracht wijzigen in het volgende:

find -L . -name "*.java" 

Commentaren

  • Symlinks waren ook mijn probleem. -follow is een beter leesbaar synoniem voor -L, zolang je het maar voor de andere parameters plaatst.
  • Geweldig ! Hartelijk bedankt!! +1!

Antwoord

Ontsnap aan de *

find . -name \*.java 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *