[BASH] Nettoyage des noms de fichiers

Salut les Bashers,

Je cherche à “nettoyer” correctement des noms de fichiers ou de répertoires, c’est à dire de supprimer les caractères indésirables (genre caractères spéciaux du Shell : *, ?, …), en vue de pouvoir passer en toute sécurité ces noms dans un formulaire HTML (programme CGI en BASH)

Je suis arrivé à une fonction comme ça, en gros on conserve les caractères alphanumériques, ainsi que quelques signes : (){}[],.-

Les caractères filtrés sont remplacés par le caractère _ (underscore)

#!/bin/bash
#
# Sanitize filename or filepath by removing unwanted characters
# $1 : string to sanitize
# returns the sanitized string
function sanitize_name()
{
 local mystring="${1//[^[:word:]\., \-\(\)\{\}\[\]]/_}"
 # remove all eventually leading dots
 until [[ "$mystring" != .* ]]; do mystring="${mystring#.}"; done;
 
 echo "$mystring"
}

sanitize_name "$1"

Ca fonctionne, mais si vous connaissez mieux, je suis preneur :wink:

EDIT: amélioration, on supprime tous les “.” qui se trouveraient éventuellement en début du nom

Ça m’étonnerait que tu puisses faire mieux…