Shell Linux : joker "*" n'est pas interp

Fermé
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 - 9 oct. 2008 à 09:16
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 9 oct. 2008 à 18:17
Bonjour.


J'utilise un script automatique (avec crontab) sous Linux.
Ce script est censé enlever certains dossiers en se basant sur le début de leur nom.

Par exemple, j'ai besoin de supprimer les dossiers dont le nom commence par "foo" :
rm "/mndossier/foo*"

Mais apparement le caractère "*" n'est pas interpété comme un joker et cela provoque une erreur :
rm : le fichier ou dossier "/mndossier/foo*" n'existe pas.

Comment faire pour que le joker soit interprété de façon à ce que les dossiers dont le nom commence par "foo" soient bien supprimés ?

Merci.
--
Sylvain
A voir également:

3 réponses

Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 825
9 oct. 2008 à 17:56
Hm, ça semble fonctionner.
Bizarre pourtant, il me semble que j'utilise le script à plusieurs endroits, et que parfois ça ne fonctionnait pas, que ce soit avec ou sans les guillemets.

Enfin, ce doit être une étourderie de ma part.

Le script que j'utilise est un script pour sauvegarder des fichiers de config, le voilà si ça peut servir à quelqu'un :
#!/bin/bash
#####
#  Un script de backup très simple créé pour
# sauvegarder des répertoires et fichiers importants.
#
#  Le script ne fait que copier les fichiers et répertoires
# à sauvegarder dans un autre répertoire, en conservant la hiérarchie.
# Les droits sont également conservés, sauf ceux de l'array dir_sauvegarde,
# c'est à dire les dossiers que l'on crée et que l'on ne copie pas entièrement,
# mais dans lesquels on sauvegarde (copie) d'autres répertoires en entier.
#
#  Par défaut, le dossier de sauvegarde est accessible uniquement par le root.
#
#  Le dossier de sauvegarde est nommé selon la date et l'heure.
#
#  Pour automatiser cette tâche, il suffit de placer le script
# dans un dossier de cron et de le rendre exécutable.
#####

###################
## CONFIGURATION

#Dossier de stockage des sauvegardes
dossier_sauvegarde_general="/mnt/unix-backup/ubuntu/";
#A qui appartiennent les sauvegardes ? (Utiliser $(whoami) pour celui qui exécute le script)
#ATTENTION, ne sera pris en compte que si l'utilisateur qui exécute le script est root.
owner=root;
grp=root;
#Droits sur le dossier de sauvegarde racine
#Il faut que ces droits donnent la lecture et l'écriture au propriétaire
chmod=755;

#Nombre de jours après lequel les sauvegardes sont obsolètes
sauvegardes_obsoletes_apres=30;
#Nombre de jours jusqu'auquel il faut vérifier les sauvegardes obsolètes
sauvegardes_obsoletes_jusqua=120;


## La liste des répertoires et fichiers à sauvegarder   #Et l'emplacement de la sauvegarde
#                                                       #(chemin relatif à celui de ce que l'on sauvegarde)
a_sauvegarder+=('/etc');                                dir_sauvegarde+=('');
a_sauvegarder+=('/boot/grub/menu.lst');                 dir_sauvegarde+=('boot/grub/');

###################
## SCRIPT

## Le dossier de sauvegarde pour cette fois (nommé selon la date et l'heure)
date_actuelle=$(date +%Y-%m-%d--%Hh%M);
dossier_sauvegarde="$dossier_sauvegarde_general$date_actuelle/";

## Création des dossiers de sauvegarde        #Modification des droits du dossier parent
mkdir -p "$dossier_sauvegarde";               if [ $(whoami) = 'root' ]; then chown $owner:$grp "$dossier_sauvegarde"; fi
                                              chmod "$chmod" "$dossier_sauvegarde";
#Création des sous-répertoires
for dossier in ${dir_sauvegarde[*]}; do
  if test ! -d "$dossier_sauvegarde$dossier"; then
    mkdir -p "$dossier_sauvegarde$dossier";
  fi
done;

## Copie des dossiers à sauvegarder
nb_dossiers=${#a_sauvegarder[*]}
for ((i=0;i<nb_dossiers;i++)); do
  cp -a "${a_sauvegarder[$i]}" "$dossier_sauvegarde${dir_sauvegarde[$i]}";
done

## Suppression des sauvegardes obsoletes
for((nb_jours=$sauvegardes_obsoletes_apres;nb_jours<$sauvegardes_obsoletes_jusqua;nb_jours++)); do
  date_obsolete=$(date +%Y-%m-%d --date="-$nb_jours day");
  rm -r $dossier_sauvegarde_general$date_obsolete*;
done

--
Sylvain
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
9 oct. 2008 à 18:17
Je t'avoue que ça me laisse perplexe aussi ;-\

Regarde quand même les valeurs renvoyées par la commande "shopt" et l'état de certaines variables (on/off)...
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
9 oct. 2008 à 10:23
Salut,

T'as essayé d'enlever les quotes doubles ?
jp@MDK:~ ssh$ echo "*.txt"
*.txt

jp@MDK:~ ssh$ echo *.txt
config_ubuntu.txt intel-i810.txt lien_wifi_freebox_ipcop.txt

jp@MDK:~ ssh$
;-))
0