Dans un script bash je suis en train d'utiliser le contenu d'une variable à utiliser comme options pour la commande find:Comment utiliser le contenu de la variable dans bash pour passer à trouver dans le script?
#!/bin/bash
FILE_EXTENSIONS=(txt png jpg)
FIRST=1
for FILE_EXTENSION in ${FILE_EXTENSIONS[@]}
do
# echo "$FILE_EXTENSION"
if [[ $FIRST == 1 ]]
then
FIND_FILTER="-iname '*.$FILE_EXTENSION'"
FIRST=0
else
FIND_FILTER="${FIND_FILTER} -o -iname '*.$FILE_EXTENSION'"
fi
done
# Read and write only for user and group, ignore case '-iname'
#find . -type f "$FIND_FILTER" -exec chmod 660 {} \;
echo Find filter: $FIND_FILTER
# This might work with some already provided suggestions:
find . -type f $FIND_FILTER
# But this fails so far
find . -type f $FIND_FILTER -exec chmod 660 {} \;
#EOF
L'objectif est de définir des droits d'accès appropriés que pour une raison quelconque tout à fait certains fichiers (tels que des images ou des documents de bureau) sont marqués exécutable.
Donc en réalité le script ci-dessus a plusieurs tableaux avec des extensions de fichiers concaténées, mais le script montre le problème.
La première approche aurait consisté à parcourir à chaque fois le tableau final et la recherche d'appel. Mais d'un point de vue de l'exécution, il serait stupide de chercher à chaque fois encore et encore.
Je pourrais aussi simplement faire ceci en python mais pour une fois j'ai pensé que je voudrais le résoudre avec des moyens basiques de Linux dans bash.
Il semble que le contenu de la variable FIND_FILTER soit correct (au moins ce qui est imprimé avec echo) mais alors ... cela ne fonctionne pas.
Des suggestions? Qu'est-ce qui ne va pas?
@Benoit Merci d'avoir nettoyé ma réponse écrite à la hâte. – chepner
Merci @chepner - qui a sauvé ma journée. Je connais maintenant mieux comment utiliser les tableaux et le plus important à propos de la syntaxe find avec() et la nécessité de les citer! – JDB