Voici un script que vous pouvez appeler en passant le mode comme premier argument et un ou plusieurs noms de répertoire comme arguments suivants. Sous Linux, si vous ne passez aucun nom de répertoire, ce sera comme si vous aviez passé .
(le répertoire courant). Nommez ce script rchmodf
, rendez-le exécutable ( chmod a+rx /path/to/rchmodf
) et placez-le quelque part sur votre $PATH
.
#!/bin/sh
mode=$1; shift
find "$@" -type f -exec chmod "$mode" {} +
Explications: mode=$1; shift
définit la variable mode
sur le premier argument du script et supprime ce premier argument de la liste. "$@"
se développe à la liste de tous les arguments.
Si vous le souhaitez, vous pouvez créer un script qui accepte à la fois un mode répertoire et un mode fichier.
#!/bin/sh
dir_mode=$1; shift
file_mode=$1; shift
find "$@" -type d -exec chmod "$dir_mode" {} + -o -type f -exec chmod "$file_mode" {} +
Notez que 744 n'est pas un mode de fichier utile; 644 (inscriptibles par l'utilisateur et lisibles par le monde) et 755 (également exécutables par le monde) sont beaucoup plus courants. De plus, changer chaque fichier d'une arborescence pour être exécutable ou ne pas l'être est rarement utile; vous voudrez probablement appeler ce script avec des arguments comme +rX
(majuscule X
, pour définir le bit exécutable uniquement pour les répertoires et pour les fichiers qui sont déjà exécutables). En fait, le X
mode de symbolique est probablement ce que vous étiez après ces scripts: chmod -R +rX .
.
Avec bash ou zsh, il existe une autre façon d'agir récursivement mais uniquement sur les répertoires. Pour bash, vous avez besoin de la version 4 et d'exécuter en shopt -s globstar
premier.
chmod a+rx **/*/
En zsh, vous pouvez agir sur les fichiers que par suffixation (.)
: chmod a+r **/*(.)
.
Je vais transmettre la question Nautilus.