Comment rendre tous les fichiers non-exécutables de manière récursive en utilisant find sans affecter les répertoires?

4

Je dois enlever l'indicateur de l'exécutable de tous les fichiers d'un répertoire et de sous-répertoires spécifiques. En ce moment je le fais avec un processus en 2 étapes

find /dir/ -type f -exec chmod ugo-x {} \;
find /dir/ -type d -exec chmod ugo+rx {} \;

Est-il possible de modifier la première ligne afin de pouvoir supprimer l'indicateur exec de tous les fichiers autres que des répertoires? Comme cela doit être fait assez régulièrement dans beaucoup de répertoires et de fichiers, je préférerais ne pas utiliser un script bash qui le ralentirait.

wting
la source
Par curiosité, qu'est-ce que votre commande actuelle ne fait pas correctement? Le -type fprédicat sélectionne déjà tous les fichiers (ou de manière équivalente, tous les fichiers autres que les répertoires, car tout ce qui est un fichier ne peut pas également être un répertoire).
David Z
@David: Sockets, FIFO, liens symboliques, périphériques, etc.
Ignacio Vazquez-Abrams le
@ Ignacio: Oui, mais la question portait sur les fichiers, pas sur tous les autres éléments.
David Z
@ David: Ceci est * nix. Tout est un fichier.
Ignacio Vazquez-Abrams le
1
@ Ignacio: Tout a un chemin de système de fichiers, bien sûr, mais vous ne pouvez pas toujours dire que tout est en fait un fichier. Certaines personnes le font, mais d’autres utilisent «fichier» dans le sens d’un fichier normal, c’est-à-dire quelque chose qui correspond au -type fprédicat find. Pour moi, le libellé de cette question suggérait fortement ce dernier sens.
David Z

Réponses:

4
find ... '!' -type d ...
Ignacio Vazquez-Abrams
la source
Merci, je n'avais pas réalisé que j'avais des opérateurs. Les guillemets simples sont-ils nécessaires car j'ai réussi à le faire fonctionner sans eux?
wting
1
Cela dépend de votre shell et de ses options. bash utilise !pour l'expansion de l'historique, il est donc judicieux de la citer dans la CLI. Vous n'en aurez probablement pas besoin dans un script cependant.
Ignacio Vazquez-Abrams le
L'expansion de l'historique n'est pas active dans les scripts, correct.
Daenyth