come utilizzare il comando "find" di unix per trovare tutti i file cpp e h?
Domanda
So che per trovare tutti i file h che devo usare: trova . -name " *. h " ma come trovare tutti i file h AND cpp?
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).