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
EDIT: amélioration, on supprime tous les “.” qui se trouveraient éventuellement en début du nom