Tengo un archivo, que está archivado por otra persona, y quiero automáticamente, después de descargarlo, cambiar una rama del sistema de archivos dentro de los archivos extraídos para obtener acceso de lectura. (No puedo cambiar cómo se crea el archivo).
He examinado este hilo: chmod: cómo agregar de forma recursiva permisos de ejecución solo a archivos que ya tienen permiso de ejecución como en algunos otros, pero no es un placer.
Los directorios originalmente vienen con varios indicadores pero todos incorrectos, pueden aparecer como:
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--
Esos son los pocos que he descubierto hasta ahora, pero podrían ser más.
find
errores cuando se trata de buscar en un directorio sin x
permiso, y así no pasa a chmod
. Lo que he estado haciendo hasta ahora es cambiar manualmente los permisos en el directorio principal, luego ir a los directorios secundarios y hacer lo mismo por ellos, y así sucesivamente. Pero esto es mucho trabajo manual. ¿No hay alguna forma de hacer esto automáticamente?
Es decir, cómo lo estoy haciendo ahora:
hacer:
$ chmod -R +x
$ chmod -R +r
hasta que no tenga errores, entonces
$ find -type f -exec chmod -x {} +
Pero debe haber una mejor manera.
Respuestas:
Necesita acceso de lectura, además de ejecutar el acceso, para listar un directorio. Si solo tiene acceso de ejecución, puede encontrar los nombres de las entradas en el directorio, pero ninguna otra información (ni siquiera los tipos, por lo que no sabe cuáles de las entradas son subdirectorios). Esto funciona para mi:
fuente
+
construye la línea de comandos de una manera diferente. En realidad no era consciente de ello;\;
es la forma habitual, con un comando por archivo que coincide con la búsqueda."{}"
lugar de{}
debería solucionarlo.Puede usar chmod con la
X
letra de modo (la X mayúscula) para establecer el indicador ejecutable solo para directorios.En el siguiente ejemplo, el indicador ejecutable se borra y luego se establece para todos los directorios de forma recursiva:
Un poco de explicación:
chmod -x foo
- borre la bandera eXecutable parafoo
chmod +x foo
- establecer la bandera eXecutable parafoo
chmod go+x foo
- igual que el anterior, pero establezca la marca solo para usuarios de Grupo y Otros , no toque el permiso de Usuario (propietario)chmod go+X foo
- igual que el anterior, pero solo se aplica a directorios, no toque archivoschmod -R go+X foo
- igual que el anterior, pero haga esto Recursivamente para todos los subdirectorios defoo
fuente
Intente cambiar todas las transmisiones al mismo tiempo:
fuente
find -type f -exec chmod -x {} +
después.Para que el propietario pueda escribir todo, leer / ejecutar por el grupo y ejecutable mundial:
Para hacer que todo esté abierto:
fuente
chmod -R 0777 .
Agregar permisos ejecutables, recursivamente , a todos los archivos (no carpetas) dentro de la carpeta actual con
sh
extensión:find . -name '*.sh' -type f | xargs chmod +x
* Observe la tubería (
|
)fuente
Dé 0777 a todos los archivos y directorios a partir de la ruta actual:
fuente