Demande conseils pour script effacement récursif de dossiers

D’une part POSIX ne connais que les options courtes, les options longues sont GNU et les options sans tirets sont BSD (penser à tar xf).

D’autre part il ne faut pas confondre l’API C et l’API shell. getopt est un programme qui s’appuie sur la méthode GNU présente dans la glibc du même non. On peut la rendre compatible avec POSIX via des variables d’environnement. getopts est une fonction builtin qui rend la commande getopt obsolète et qui est POSIX (deplus elle existe bien dans dash, bash et zsh).

On est bien d’accord, et j’avais d’ailleurs précisé dans les titres des citations :
GNU libc Using Getopt a écrit:”
GNU libc Getopt Long Options a écrit:”

Mais ça ne fait plus aucun doute quand tu le formule aussi clairement. :slightly_smiling:

=================
Il reste que, comme :

“… Note that getopts is not able to parse GNU-style long options (–myoption) or XF86-style long options …”

[strike]D’où l’idée d’utiliser plutôt “Getopt” et/ou “Getopt Long Options” => tout en GNU.[/strike] EDIT: On t’a déjà dit que NON… t’es bouché ou quoi…
[strike]Est-ce une bonne décision ?[/strike] EDIT: NON
Ou alors vaudrait-il mieux se passer des options introduites par “–” et ne garder que “-”, EDIT: Oui
ce qui permettrait de rester dans les standards POSIX.EDIT: Oui

J’hésite, et seulement quelqu’un qui a de l’expérience pourra me le dire,
car j’ai déjà du mal à savoir si les liens que je récupère sont assez fiables et pas obsolètes.

Nos cousins sous Ubuntu propose ca: (forum.ubuntu-fr.org/viewtopic.ph … 8#p3295598)

while getopts "vh-:" opt ; do
	if [ $opt = "-" ] ; then
		case $OPTARG in
			help ) opt="h" ;;
			version ) opt="v" ;;
			* ) echo "option longue inconnue..." ;;
		esac
	fi
	case $opt in
		h ) echo "help...."
        print_info"
        ;;
		v ) echo "version..." 
        echo "$VERSION"
        ;;
		? ) echo "option inconnue" 
        ;;
	esac
done

A priori ca devrait fonctionner. Par contre je ne sais pas trop ce que ca donnerait avec un enchainement de commandes du type wget -O- "[url de la cle]" | apt-key add -

[code]#!/bin/bash
#################

ScriptName : rmedir (remove empty dirs)

#################

var

##########################
scriptBaseName=$(basename $0)
barre="\n#printf '=%.0s' {1..62}\n"
##########################

help msg

##########################
if [[ $LANG = fr* ]]; then # if french LANG locale.
invalid_opt=“Option non valide.“
help_msg=”${barre}”${scriptBaseName}" permet de supprimer récursivement les répertoires vides\n
\t contenus dans le répertoire de départ.\n
\n
Syntaxe : $scriptBaseName OPTION [chemin du répertoire de départ]\n
\n
Note: Si aucun répertoire de départ n’est donné,\n
\t le répertoire courant ("$PWD") sera utilisé.\n
\n
Options: \n
-h \t - Affiche ce fichier d’aide.\n
-v \t - Mode verbeux.\n
-i \t - Demande de confirmation avant chaque suppression."

else # all other languages => en.
invalid_opt=“Invalid Option.“
help_msg=”${barre}”${scriptBaseName}" recursively removes empty folders from the start path.\n
\n
Syntax : $scriptBaseName OPTION [START PATH]\n
\n
Note: If no start path is given,\n
\t the current path ("$PWD") will be used.\n
\n
Options:\n
-h \t - Displays this help file.\n
-v \t - Verbose mode.\n
-i \t - Ask for confirmation for each empty folder deletion.“
fi
help_msg=”${help_msg}${barre}"
##################################
getopts “:hvi” option
case $option in
h)
echo -e $help_msg # Display help message.
exit
;;
v)
cmd_supress="-exec rmdir -v" # Verbose mode.
;;
i)
cmd_supress="-ok rmdir" # Ask for confirm before deletion.
;;
?)
echo -e “$OPTARG : $invalid_opt” # Invalid option.
exit 1
;;
esac
shift $((OPTIND-1))
##################################
find $1 -depth -type d -empty $cmd_supress {} ;
[/code]

Très bonne doc sur getopts.

Je n’ai pas su comment (mais j’aimerai bien savoir) renvoyer “{} ;” dans la variable depuis le “case $Option”,
du coup, je l’ai mis à la suite de la variable “$cmd_supress” dans la ligne de commande.