Encuentre directorios y archivos con permisos distintos de 775/664

21

Estoy moviendo un sitio web de un servidor a otro y Git no almacena metadatos como los permisos de archivos. Necesito encontrar los directorios y archivos que no son 775/664 respectivamente.

En este momento, estoy usando este artilugio adoquinado:

$ 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'

Aunque esto funciona, siento que es bastante hacky. ¿Hay una mejor manera de hacer esto, tal vez de forma canónica, o debería ser hacky?

Esto se ejecuta en una versión reciente de Ubuntu con herramientas GNU en Bash.

dotancohen
fuente

Respuestas:

39

Use la -permprueba finden combinación con -not:

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775coincide con todos los archivos con permisos exactamente iguales a 775. -perm 664hace lo mismo para 664.
  • -not (booleano NO) niega la prueba que sigue, por lo que coincide exactamente con lo contrario de lo que tendría: en este caso, todos aquellos archivos que no tienen los permisos correctos.
  • -o(OR booleano) combina dos conjuntos de pruebas juntas, coincidiendo cuando cualquiera de ellas lo hace: tiene la precedencia más baja, por lo que divide nuestras pruebas en dos grupos distintos. También puedes usar paréntesis para ser más explícito. Aquí hacemos coincidir directorios con permisos que no lo son 775y archivos normales con permisos que no lo son 664.

Si desea dos comandos separados para directorios y archivos, simplemente córtelos por la mitad -oy use cada mitad por separado.

Michael Homer
fuente
¡Hermoso gracias! No sabía que se podían establecer dos condiciones diferentes (tipo -d y tipo -f, por ejemplo) ni sabía acerca de -perm.
dotancohen
Quizás tenga en cuenta que -notno es un estándar POSIX; usan !en su lugar.
user1404316
2

No tengo idea de lo que tu código estaba tratando de lograr. Normalmente, la razón para encontrar archivos y directorios con permisos incorrectos es para cambiarlos.

Así que esto es lo que estoy usando con éxito en Ubuntu 16.04

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

Esto demuestra el! símbolo se escapó

NZ Dev
fuente
De hecho, el objetivo no era cambiar los permisos de los archivos, sino identificar qué archivos necesitan permisos de copos de nieve al cargarlos en un servidor web de producción. Gracias.
dotancohen