Supprimer un dossier d'une liste

Harry974 -  
 Harry974 -
Bonjour,

je dois faire un script qui liste les dossiers se trouvant dans un dossier principal, qui attribue a chacun un numéro, et lorsque l'utilisateur saisit un des numéros le dossier est supprimé.

Malheureusement pour l'instant je n'arrive qu'à lister les dossier et l'espace qu'ils occupent et leur arborescence avec ce bout de script :

REP_SAUV=/toto/

ls -tr ${REP_SAUV} | \
while read rep
do
if [ -d ${REP_SAUV}/${rep} ]
then
printf "%-108s (%7s Mo)\n" "$(ls -ld ${REP_SAUV}/${rep})" "$(du -m -s ${REP_SAUV}/${rep} | cut -f1)"
else
printf "%-108s\n" "$(ls -ld ${REP_SAUV}/${rep})"
fi
done

voilà il faudrait que je rajoute une commande qui liste les dossiers en attribuant un chiffre, puis que l'utilisateur puisse supprimer un dossier en entrant un des chiffres...

Quelqu'un a une piste svp ?
A voir également:

17 réponses

iluvatar
 
Une fois que connait le nom du fichier, tu peut le renommer en utilisant la commande
mv
0
Harry974
 
euh oui merci mais premièrement je veux supprimer le fichier et deuxièment je vois pas en quoi ça m'aide...
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

pour supprimer un répertoire il faut utliser l'option -R de la commande rm
rm -R /chemin/vers/rep
--
106485010510997108
0
iluvatar
 
Quand tu disais attribuer un numero, j'ai pensé que tu voulais changer le nom des repertoires en y incluant un index, et ensuite supprimer le dossier dont l'index correspond au numéro rentrer par l'utlisateur.

L'utilitaire awk permet se genre de manipulation.
si tu pipe le resultat de ton script avec la commande
awk '{i++;print i $1;}'
tu obtiendra en sortie la liste dont chaque ligne commencera par un index.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
iluvatar
 
ou plutôt
awk '{i++;print(i, $1);}'
qui espace l'index et le reste de la ligne
La commande
<code> awk '{print $2}'</code permettra d'extraire le 2eme champ de chaque ligne (i.e supprimer les index de ta liste)
0
Harry974
 
en fait ce que je veux c'est faire une liste des dossiers :

1) dossier1
2) dossier2
....

ensuite je demande à l'utilisateur "Quel dossier voulez-vous supprimer ?"

supposons qu'il tape 4, alors cela supprime le dossier correspondant au numéro 4.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Voilà une façon de faire :
[tmpfs]$ cat foo.sh
#! /bin/bash

rep="/home/$USER/"
ls -F "$rep" | grep  "/$" | cat -n
echo
echo "Quel répertoire voulez-vous supprimer ?"
read choix
echo
echo "rm -rf ${rep}$(ls -F "$rep" | grep  "/$" | sed -n "${choix}p")"

[tmpfs]$ ./foo.sh

     1  bin/
     2  Desktop/
     3  Documents/
     4  dosemu/
     5  GNUstep/
     6  Images/
     7  mail/
     8  Musique/
     9  PicasaDocuments/
    10  Programmes/
    11  public_html/
    12  sh/
    13  smb4k/
    14  Téléchargement/
    15  tmp/
    16  Vidéo/

Quel répertoire voulez-vous supprimer ?
14

rm -rf /home/jp/Téléchargement/

[tmpfs]$
N'oublie pas d'enlever le "echo" de la commande "rm" si toutefois le script répond à tes attentes ;-))
0
Harry974
 
Oui c'est presque ce que je veux, est-il possible d'afficher à côté de chaque dossier l'espace occupé sur le disque dur ?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Modifie le script comme suit :
#! /bin/bash

rep="/home/$USER/"

for fic in $(ls -F "$rep" | grep  "/$");do du -hs ${rep}${fic} 2>/dev/null;done | nl -s " : Taille : "
echo
echo "Quel répertoire voulez-vous supprimer ?"
read choix
echo
echo "rm -rf ${rep}$(ls -F "$rep" | grep  "/$" | sed -n "${choix}p")"

;-))
0
Harry974
 
j'ai pas d'erreur mais ça ne m'affiche rien ... :(
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Voilà ce que ça donne chez moi :
[tmpfs]$ ./foo.sh
     1 : Taille : 104K  /home/jp/bin/
     2 : Taille : 52K   /home/jp/Desktop/
     3 : Taille : 34M   /home/jp/Documents/
     4 : Taille : 13K   /home/jp/dosemu/
     5 : Taille : 660K  /home/jp/GNUstep/
     6 : Taille : 9,7M  /home/jp/Images/
     7 : Taille : 4,0K  /home/jp/mail/
     8 : Taille : 4,0K  /home/jp/Musique/
     9 : Taille : 0     /home/jp/PicasaDocuments/
    10 : Taille : 59M   /home/jp/Programmes/
    11 : Taille : 44K   /home/jp/public_html/
    12 : Taille : 189K  /home/jp/sh/
    13 : Taille : 0     /home/jp/smb4k/
    14 : Taille : 33M   /home/jp/Téléchargement/
    15 : Taille : 1,3M  /home/jp/tmp/
    16 : Taille : 28K   /home/jp/Vidéo/

Quel répertoire voulez-vous supprimer ?
8

rm -rf /home/jp/Musique/

[tmpfs]$ 
;-))
0
Harry974
 
tu peux remettre la ligne à modifier en faisant des retours à la ligne stp car dans l'autre post ça s'arrête à "Ta" ...
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
for fic in $(ls -F "$rep" | grep  "/$")
do du -hs ${rep}${fic} 2>/dev/null
done | nl -s " : Taille : "
0
Harry974
 
trop bizarre le script s'exécute mais la liste n'apparaît pas, car ensuite quand je tape un chiffre pour supprimer on m'afiche bien le dossier qui correspond au nombre :/
0
Harry974
 
ah je pense savoir peut être pourquoi, c'est parce que je dois mettre le script dans un fichier avec en tête #!/bin/ksh ... ça vient de là le problème ?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Affiche ton script...

Que donne la ligne seule dans un shell ?
0
Harry974
 
c'est bon j'ai bidouillé un truc j'ai pris ta boucle for et j'ai changé le "do" par mon printf de l'énoncé.

script :

for fic in $(ls -F "${REP_SAUV}" | grep "/$")
do printf "%-60s (%5s Mo)\n" "$(ls -ld ${REP_SAUV}${fic} | awk '{print $9}')" "$(du -m -s ${REP_SAUV}${fic} | cut -f1)"
done | nl -s " : Dossier : "
echo
read choix?"Quel repertoire voulez-vous supprimer ? (a pour aucun)"

if [[ ${choix} != [aA] ]] then
echo
cd ${REP_SAUV}
echo "rm -rf $(ls -F "${REP_SAUV}" | grep "/$" | sed -n "${choix}p")"
else
:
fi

ce qui donne :

1 : Dossier : /toto/FOKP_20080727/ (1414.82 Mo)
2 : Dossier : /toto/JBAR_20080514_PBTHREAD/ ( 0.61 Mo)
3 : Dossier : /toto/JBAR_20080521/ ( 0.38 Mo)
4 : Dossier : /toto/JBAR_20080521_bad/ ( 0.02 Mo)

Quel repertoire voulez-vous supprimer ? (a pour aucun)4

rm -rf JBAR_20080521_bad/

thanks a lot
0