Trova directory e file con autorizzazioni diverse da 775/664


21

Sto spostando un sito Web da un server a un altro e Git non memorizza metadati come i permessi dei file. Devo trovare le directory e i file che non sono rispettivamente 775/664.

In questo momento, sto usando questo aggeggio acciottolato:

$ find . -type d -exec ls -la {} \; | grep ^d | grep -v ^drwxrwxr-x
$ find . -type f -exec ls -la {} \; | grep -v ^d | grep -v ^-rw-rw-r-- | grep -v '.git'

Anche se funziona, penso che sia piuttosto confuso. C'è un modo migliore per farlo, forse un modo canonico, o dovrei essere solo confuso?

Questo è in esecuzione su una recente versione di Ubuntu con strumenti GNU sotto Bash.

Risposte:


39

Utilizzare il -permtest findin combinazione con -not:

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775corrisponde a tutti i file con autorizzazioni esattamente uguali a 775. -perm 664fa lo stesso per 664.
  • -not (NOT booleano) annulla il test che segue, quindi corrisponde esattamente al contrario di quello che avrebbe: in questo caso, tutti quei file che non dispongono delle autorizzazioni corrette.
  • -o(OR booleano) combina due serie di test, corrispondenti quando uno di essi lo fa: ha la precedenza più bassa, quindi divide i nostri test in due gruppi distinti. Puoi anche usare le parentesi per essere più esplicito. Qui abbiniamo directory con autorizzazioni che non sono 775e file ordinari con autorizzazioni che non lo sono 664.

Se volevi due comandi separati per directory e file, basta tagliarli a metà -oe usarli separatamente.


Bello grazie! Non sapevo che potessero essere impostate due diverse condizioni (tipo -d e tipo -f per esempio) né sapevo di -perm.
dotancohen,

Forse notare che -notnon è uno standard POSIX; usano !invece.
user1404316

2

Non ho idea di cosa stia cercando di ottenere il tuo codice. Normalmente il motivo per trovare file e directory con permessi errati è allo scopo di cambiarli.

Quindi questo è quello che sto usando con successo in Ubuntu 16.04

find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;

Questo dimostra il! simbolo in fuga


In effetti, l'obiettivo non era quello di modificare le autorizzazioni dei file, ma piuttosto di identificare quali file necessitavano delle autorizzazioni per i fiocchi di neve durante il caricamento su un server Web di produzione. Grazie.
dotancohen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.