Supprimer un dossier d'une liste

Fermé
Harry974 - 25 juil. 2008 à 11:47
 Harry974 - 28 juil. 2008 à 09:21
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

Une fois que connait le nom du fichier, tu peut le renommer en utilisant la commande
mv
0
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 juil. 2008 à 13:34
Salut,

pour supprimer un répertoire il faut utliser l'option -R de la commande rm
rm -R /chemin/vers/rep
--
106485010510997108
0
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
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
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
25 juil. 2008 à 14:06
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
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
25 juil. 2008 à 15:47
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
j'ai pas d'erreur mais ça ne m'affiche rien ... :(
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
25 juil. 2008 à 16:13
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
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
25 juil. 2008 à 16:20
for fic in $(ls -F "$rep" | grep  "/$")
do du -hs ${rep}${fic} 2>/dev/null
done | nl -s " : Taille : "
0
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
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
25 juil. 2008 à 16:40
Affiche ton script...

Que donne la ligne seule dans un shell ?
0
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