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:
La mode debuggage bash me retourne:
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 )
Il y a visiblement un problème de caractères d'échappement.
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'\'''
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.
Partager