Lorsque je connecte une clé USB (FAT) à mon ordinateur Mac ou Ubuntu, tous les fichiers ont les bits exécutables définis. Après avoir copié la structure de répertoires sur mon disque dur, comment puis-je supprimer les bits exécutables de manière récursive uniquement dans les fichiers et les conserver dans les répertoires?
73
Réponses:
Avec GNU
chmod
(sur Ubuntu), variante à commande unique (commençant dans le répertoire actuel):Explication:
-R
- opérer de manière récursive-x
- supprimer les indicateurs exécutables pour tous les utilisateurs+X
- définir des indicateurs exécutables pour tous les utilisateurs s'il s'agit d'un répertoireDans ce cas, le capital
X
s'applique uniquement aux répertoires, car tous les indicateurs de l'exécutable ont été effacés par-x
. Sinon+X
, active le ou les indicateurs exécutables également si l'indicateur a été défini à l'origine pour un utilisateur, un groupe ou autre.Avec BSD
chmod
(présent sur Mac OS X), vous devez le faire séparément en deux commandes:(Si vous souhaitez également inclure des fichiers cachés dans le répertoire principal, vous devrez probablement remplacer * par. (Point), mais cela n’a pas été testé.)
la source
chmod -R a-x+X *
umask
ne permet pasx
à tous Utilisez-vous defaultumask
ou l'avez-vous changé? Pourriez-vous s'il vous plaît envoyer la sortie de laumask
commande? Outre votre solution, il existe également cette possibilité:chmod -R a-x,+X *
qui définira l’x
autorisation en fonction de votreumask
. Je vais mettre à jour la réponse, mais je voudrais d’abord vérifier le comportement sous BSD / Mac OS X.find
variante de la réponse ci-dessous pour son style combinant des outils simples qui font One Thing Well..
place de*
si vous voulez que cela soit appliqué à tous les fichiersSi vous entrez d'abord dans le bon chemin:
ou
La recherche trouve tous les fichiers de type 'f' (ce qui signifie fichier ordinaire) dans le chemin. puis appelle chmod -x sur chaque fichier. Le {} est remplacé par le nom du fichier et le \; termine la commande chmod.
la source
find
soutien le prend, utilisez-exec ... \+
plutôt que-exec ... \;
- cela nécessitera moins defork
+exec
s. Si ce n'est pas le cas, utilisezfind ... -print0 | xargs -0 ...
.find . -type f -perm +111 -exec chmod -x {} \;
find
soutiens,-print0
je suis sûr qu'ils le feront aussi-exec
Sous Linux et Unix dans une fenêtre de terminal ou sous Mac OS X, utilisez ceci dans Terminal.app:
la source
Le
chmod -x+X
chemin n’a pas fonctionné pour moi non plus sur Ubuntu, j’ai donc écrit ce script minimal en python:S'il peut y avoir des éléments supplémentaires fantaisistes tels que des sockets dans votre système de fichiers, vous voudrez peut-être entourer le dernier chmod d'un try / catch.
la source