2013-07-09 14 views
11

Ho ereditato uno script come parte di un processo di compilazione per un'applicazione, e quando lo eseguo sul build server (Ubuntu Precise) funziona bene, ma quando corro sul mio Mac ottengo "opzione illegale - t". Il comando che ha problemi è semplice, è solo una chiamata a find:Differenza tra Mac `find` e Linux` find`

find -type f -not -path [...] 

Il test ho scoperto che è l'opzione -type che ha problemi sul mio Mac. Se corro invece:

find ./ -type f -not -path [...] 

Funziona, tuttavia entrambi funzionano (apparentemente in modo equivalente) sulla scatola Linux. Quindi la mia domanda è: ci sono differenze significative tra il binario OSX (BSD) find e Linux (GNU?) find e la mia modifica allo script (aggiungendo il percorso ./ all'inizio) interromperà qualcosa che non ho ancora scoperto?

+0

correlati:.. Http: // stackoverflow.com/questions/752818/why-does-macs-find-not-have-the-option-printf – legoscia

+0

In Linux non c'è bisogno di menzionare il nome della directory o il percorso. Di default prenderà la directory corrente. –

+0

In mac os specificando il percorso o la directory campi mandotari –

risposta

11

Il numero standard impone il percorso (./ nell'esempio) obbligatorio. find su MacOS segue lo standard.

GNU find (quello disponibile su Linux) consente al percorso di essere facoltativo. Se non specificato, si assume che la directory corrente sia il percorso. Su Linux, uomo ritrovamento dice

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] 

(si noti che il percorso è specificato all'interno [...] denota che è facoltativo

Si tratta di una buona pratica per specificare il percorso

+0

Ok grazie, ho aggiornato lo script per includere il percorso, ma io non ero sicuro se mi mancassero alcune differenze di sintassi più fondamentali. – GTF

+0

Ci possono essere altre differenze, ma per lo più saranno differenze nelle opzioni e nei test che supportano - per esempio, il supporto di OS X supporta i test '-Bmin',' -Bnewer' e '-Btime' che controllano il file data di creazione (inode "tempo di nascita"), che linux non ha; d'altra parte, la ricerca di OS X non supporta l'opzione '-D debugopts'. Ma se lo stesso comando find viene eseguito senza errori su entrambi, generalmente lo stesso farà su entrambi ... –