come utilizzare il comando "find" di unix per trovare tutti i file cpp e h?

StackOverflow https://stackoverflow.com/questions/277999

  •  07-07-2019
  •  | 
  •  

Domanda

So che per trovare tutti i file h che devo usare: trova . -name " *. h " ma come trovare tutti i file h AND cpp?

È stato utile?

Soluzione

find . -name \*.h -print -o -name \*.cpp -print

o

find . \( -name \*.h -o -name \*.cpp \) -print

Altri suggerimenti

find -name "*.h" -or -name "*.cpp"

(modificato per proteggere gli asterischi che sono stati interpretati come formattazione)

Paul Tomblin ha già fornito una risposta formidabile, ma pensavo di aver visto uno schema in quello che stavi facendo.

È probabile che utilizzerai find per generare un elenco di file da elaborare con grep un giorno e per tale attività esiste uno strumento molto più intuitivo, Ack

Funziona su qualsiasi sistema che supporti perl e cercare ricorsivamente tutti i file relativi a C ++ in una directory in modo ricorsivo per una determinata stringa è semplice come

ack "int\s+foo" --cpp 

" - cpp " per impostazione predefinita corrisponde ai file .cpp .cc .cxx .m .hpp .hh .h .hxx

(Salta anche le directory del repository per impostazione predefinita, quindi non si abbinano ai file che sembrano file in essi.)

Un modo breve e chiaro per farlo con trova è:

find . -regex '.*\.\(cpp\|h\)'

Dalla pagina man per -regex : " Questa è una corrispondenza sull'intero percorso, non una ricerca. " Da qui la necessità di aggiungere il prefisso . * in modo che corrisponda all'inizio del percorso ./dir1/dir2 / ... prima del nome file.

find . -regex ".*\.[cChH]\(pp\)?" -print

Questo test è andato bene per me in Cygwin.

Puoi usare find in questa forma breve:

find \( -name '*.cpp' -o -name '*.h' \) -print

-print può essere omesso. L'uso di -o solo tra le espressioni è particolarmente utile quando vuoi trovare più tipi di file e fare lo stesso lavoro (diciamo per calcolare md5sum).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top