Trova tutti i file eseguibili all'interno di una cartella nel terminale

14

Ho una cartella myfolder che contiene un'enorme gerarchia di file / cartelle.
Come trovare tutti i file eseguibili all'interno di questa cartella?

Su Ubuntu funziona: find . -executable -type f

Ma Mac OS X Mavericks (che usa anche bash ) non riesce a ottenerlo:

find: -executable: unknown primary or operator
    
posta Nicolas Raoul 08.01.2014 - 06:15
fonte

3 risposte

21

Questo troverà tutti i file (non i collegamenti simbolici) con il bit eseguibile impostato:

find . -perm +111 -type f

Questo anche trova i link simbolici (che sono spesso ugualmente importanti)

find . -perm +111 -type f -or -type l

Ecco come funziona il comando se non è ovvio:

  • find è ovviamente il programma di ricerca (:
  • . fa riferimento alla directory per iniziare a cercare in ( . = directory corrente)
  • -perm +111 = con uno qualsiasi dei bit eseguibili impostati ( + significa "nessuno di questi bit", 111 è l'ottale per il bit eseguibile su proprietario, gruppo e chiunque)
  • -type f significa che il tipo è un file
  • -or booleano O
  • -type l significa che il tipo è un link simbolico
risposta data 08.01.2014 - 07:01
fonte
5

Non sono riuscito a far funzionare la risposta di Ian (10.6.8), ma quanto segue ha dato i risultati attesi:

find . -type f -perm +0111 -print

modifica aggiornamento

Anche questo sembra funzionare!

find . -type f -perm +ugo+x -print

Suppongo che la "x" non abbia significato senza l'utente / gruppo / altri specificatori.

    
risposta data 08.01.2014 - 06:59
fonte
4

Da alla pagina man per trovare in OS X :

 -perm [-|+]mode
         The mode may be either symbolic (see chmod(1)) or an octal number.  If the mode is symbolic, a
         starting value of zero is assumed and the mode sets or clears permissions without regard to the
         process' file mode creation mask.  If the mode is octal, only bits 07777 (S_ISUID | S_ISGID |
         S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO) of the file's mode bits participate in the comparison.
         If the mode is preceded by a dash (''-''), this primary evaluates to true if at least all of
         the bits in the mode are set in the file's mode bits.  If the mode is preceded by a plus
         (''+''), this primary evaluates to true if any of the bits in the mode are set in the file's
         mode bits.  Otherwise, this primary evaluates to true if the bits in the mode exactly match the
         file's mode bits.  Note, the first character of a symbolic mode may not be a dash (''-'').

Quindi ti serve:

find . -type f -perm +0111 -print

Ricorda che OS X è basato su BSD , non basato su Linux, quindi i comandi di Gnu a cui sei abituato Le distribuzioni Linux (di cui find è una di queste) non sono necessariamente uguali a quelle di OS X. Questa non è una differenza di shell, è una differenza di strumenti di utilità del sistema operativo / sistema operativo.

    
risposta data 08.01.2014 - 06:49
fonte

Leggi altre domande sui tag