Cuando conecto una memoria USB (FAT) en mi máquina Mac o Ubuntu, todos los archivos tienen los bits ejecutables establecidos. Después de haber copiado la estructura de directorios en mi disco duro, ¿cómo elimino los bits ejecutables recursivamente solo de los archivos y los mantengo en los directorios?
73
Respuestas:
Con la
chmod
variante de comando único GNU (en Ubuntu) (comenzando en el directorio actual):Explicación:
-R
- operar recursivamente-x
- eliminar banderas ejecutables para todos los usuarios+X
- establecer banderas ejecutables para todos los usuarios si es un directorioEn este caso, el capital se
X
aplica solo a los directorios porque todos los indicadores ejecutables fueron borrados por-x
. De lo contrario,+X
establece banderas ejecutables también si la bandera se configuró originalmente para cualquiera de los usuarios, grupos u otros.Con BSD
chmod
(que está presente en Mac OS X) debe hacerlo por separado en dos comandos:(Si también desea incluir archivos ocultos en el directorio principal, es probable que necesite cambiar * a. (Punto), pero no está probado).
fuente
chmod -R a-x+X *
umask
no permitex
permiso para todos. ¿Utiliza el valor predeterminadoumask
o lo cambió? ¿Podría por favor enviar salida deumask
comando? Además de su solución, también existe esta posibilidad:chmod -R a-x,+X *
que establecerá elx
permiso de acuerdo con suumask
. Actualizaré la respuesta, pero primero me gustaría verificar el comportamiento en BSD / Mac OS X.find
variante en la respuesta a continuación por su estilo de combinar herramientas simples que hacen una cosa bien..
lugar de*
si desea que esto se aplique a todos los archivosSi primero ingresas a la ruta correcta:
o
La búsqueda encuentra todos los archivos de tipo 'f' (que significa archivo normal) en la ruta. y luego llama a chmod -x en cada archivo. El {} se sustituye por el nombre del archivo y el \; termina el comando chmod.
fuente
find
admite, use en-exec ... \+
lugar de-exec ... \;
: requerirá menosfork
+exec
s. Si no es así, úsalofind ... -print0 | xargs -0 ...
.find . -type f -perm +111 -exec chmod -x {} \;
find
apoyos-print0
estoy bastante seguro de que también será compatible-exec
En Linux y Unix en una ventana de terminal o en Mac OS X, use esto en Terminal.app:
fuente
La
chmod -x+X
forma tampoco funcionó para mí en ubuntu, por lo tanto, escribí este script mínimo de python:Si puede haber algo extra elegante, como sockets en su sistema de archivos, es posible que desee rodear el último chmod con un try / catch.
fuente