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
chmodvariante 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
Xaplica solo a los directorios porque todos los indicadores ejecutables fueron borrados por-x. De lo contrario,+Xestablece 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 *umaskno permitexpermiso para todos. ¿Utiliza el valor predeterminadoumasko lo cambió? ¿Podría por favor enviar salida deumaskcomando? Además de su solución, también existe esta posibilidad:chmod -R a-x,+X *que establecerá elxpermiso de acuerdo con suumask. Actualizaré la respuesta, pero primero me gustaría verificar el comportamiento en BSD / Mac OS X.findvariante 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
findadmite, use en-exec ... \+lugar de-exec ... \;: requerirá menosfork+execs. Si no es así, úsalofind ... -print0 | xargs -0 ....find . -type f -perm +111 -exec chmod -x {} \;findapoyos-print0estoy bastante seguro de que también será compatible-execEn Linux y Unix en una ventana de terminal o en Mac OS X, use esto en Terminal.app:
fuente
La
chmod -x+Xforma 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