Bonjour,

j'essaie de créer un script bash permettant d'assigner les mêmes droits à l'utilisateur et au groupe pour un répertoire donné (récursivement).
Afin de gérer les différentes options de mon script et d'avoir un script "bien fait", je souhaite utiliser la commande getopt.
Pour rechercher les droits à modifier, j'utilise la commande find.

Malheureusement, la commande find que j'utilise ne fonctionne pas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/bash
error(){...exit 1} 
usage(){...}

# Pas de paramètre 
[[ $# -lt 1 ]] && error

# -o : options courtes # -l : options longues 
options=$(getopt -o hd:u:g: -l help,dir:,user:,group: -- "$@") 

# éclatement de $options en $1, $2... 
set -- $options 

while true; do 
    case "$1" in 
        -d| --dir) ARG_DIR=$2; 
            shift 2;; # on décale la liste des options de 2 ($1 et $2 sont remplacés par $3 et $4 s'ils existent) 
		-u| --user) ARG_USER=$2;
            shift 2;; # on décale la liste des options de 2 ($1 et $2 sont remplacés par $3 et $4 s'ils existent) 
		-g| --group) ARG_GROUP=$2;
            shift 2;; # on décale la liste des options de 2 ($1 et $2 sont remplacés par $3 et $4 s'ils existent) 
        -h|--help) usage 
            shift;; # on décale la liste des options de 1 
        --) # fin des options 
            shift # on décale la liste des options de 1 
            break;; 
        *) error 
            shift;; # on décale la liste des options de 1 
    esac 
done

###########PROBLEME DE CARACTERE D'ECHAPPEMENT POUR LA COMMANDE FIND#####################
#echo "find $ARG_DIR -user $ARG_USER 2>/dev/null"
#set -x
find $ARG_DIR -user $ARG_USER 2>/dev/null|
(
	while read; do
		RIGHTS=$(stat -c "%a" ${REPLY})
		GROUP=$(stat -c "%G" ${REPLY})
		RIGHT_USER=${RIGHTS:0:1}
		RIGHT_GROUP=${RIGHTS:1:1}
		RIGHT_OTHERS=${RIGHTS:2:1}
		DATE=`date "+[%Y-%m-%d %H:%M:%S]"`
		if [[ $GROUP = $ARG_GROUP ]]
		then
			#Evite les cas ou chmod=0 ==> Aucun droit pour user,group et others
			if [[ $RIGHT_GROUP && $RIGHT_OTHERS ]]
			then
				if [ $RIGHT_USER != $RIGHT_GROUP ]
				then
					`chmod ${RIGHT_USER}${RIGHT_USER}${RIGHT_OTHERS} ${REPLY}`
					echo ${DATE}"CHMOD OK:"${RIGHTS}"-->"${RIGHT_USER}${RIGHT_USER}${RIGHT_OTHERS}":"${REPLY}
				fi
			fi
		else
			echo ${DATE}"**INVALID GROUP**:"${GROUP}":"${REPLY}
		fi
	done
)
La mode debuggage bash me retourne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
[uq6ax7@localhost scripts]$ ./modif_rules_group_vs_user.sh -d /home/uq6ax7/scripts/test/ -u uq6ax7 -g uq6ax7
+ read
+ find ''\''/home/uq6ax7/scripts/test/'\''' -user ''\''uq6ax7'\'''
Il y a visiblement un problème de caractères d'échappement.
J'ai cherché un peu partout sur le net et essayé plusieurs choses mais rien à faire: je n'arrive pas à virer ses fameux caractères.

Bien sûr, lorsque je teste sans utiliser la commande getopt, tout fonctionne correctement.

Si quelqu'un a une solution, je suis preneur.