Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1437 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Script qui fonctionne, mais

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script qui fonctionne, mais

n°406479
_Faust_
Burn-out général
Posté le 10-02-2004 à 19:47:29  profilanswer
 

J'ai écrit un script qui prend un nombre variable de paramètres (qui sont des répertoires existants dans le répertoire courant).
 
Pour chaque répertoire, ca déplace tous ses fichiers dans le répertoire courant et si les noms de fichier sont identiques, ca concatene dans le répertoire courant. Quand les répertoires nommés sont vides, il sont détruit.
 
Ca fonctionne (enfin, je crois) mais est-ce que ca serait possible, au lieu de:
 
-%./script.sh  
Quel dossier voulez vous nettoyer?
 
ca serait:
-%./script. dossierpournettoyer
 
?
 
voici le script:
 

Code :
  1. #!/bin/bash
  2. echo "Quel dossier voulez vous nettoyer?"
  3. read folder
  4. if [ ! -d $folder ]; then
  5. echo "Ce dossier n'existe pas"
  6. else
  7. for file in $folder/* ; do
  8. exist=${file##*/}
  9. if [ -f $exist ]; then
  10. cat $file >> $exist
  11. else
  12. cp $folder/* $folder/..
  13. fi
  14. done
  15. fi
  16. for subfold in $folder/* ; do
  17. if [ ! -f $subfold ] || [ -d $subfold ]; then
  18. echo "DOSSIER CONTENANT DES SOUS-DOSSIERS"
  19. else
  20. rm -rf $folder
  21. fi
  22. done

mood
Publicité
Posté le 10-02-2004 à 19:47:29  profilanswer
 

n°406485
AirbaT
Connection timed out
Posté le 10-02-2004 à 19:53:37  profilanswer
 

Tout betement folder=$1 à la place de ton read ?

n°406486
BMOTheKill​er
Posté le 10-02-2004 à 19:53:37  profilanswer
 

tu enlèves les 2 premières lignes que tu remplaces simplement par :
 
[ "$1" != "" ] && folder="$1"
 
edit : la vache la synchro :ouch: c'est rare


Message édité par BMOTheKiller le 10-02-2004 à 19:54:08
n°406547
_Faust_
Burn-out général
Posté le 10-02-2004 à 20:45:06  profilanswer
 

super, merci ca marche super bien...
 
un autre chose, si le dossier contient des sous-dossiers, le script fonctionne...
 
mais si le dossier contient des dossiers ET des sous-dossiers, le script copie les fichiers dans le répertoire parent et efface quand même le sous-dossier...

n°406764
aigles
Posté le 11-02-2004 à 10:36:04  profilanswer
 

Je vois tout d'abord trois problèmes avec ta boucle 'for file in $folder/*'
 
1) Si le répertoire est vide, tu récupères "$folder/*" dans la variable 'file'.
Du coup tu vas avoir une erreur sur le cat ou le cp (qui devrait être 'cp $file $folder/..')
 
Pour éviter ça :
for file in $(ls -1 $folder)
 
2)Tu ne prends pas en compte les fichiers dont le nom commence par '.' (exemple .profile), ces derniers ne sont donc pas déplacés.
 
Si tu veux les prendre en compte il te faut faire :
for file in $(ls -1a $folder | grep -Ev '^(\.|\.\.)$')
 
3) Si ton répertoire contient des sous-répertoires, tu risque d'avoir des problèmes.
Si un fichier existe déjà avec le nom du sous-répertoire, tu vas faire un cat du sous-répertoire ce qui n'a aucun sens.
 
 
 
Dans ta dernière boucle 'for subfold in $folder/*' tu supprime le répertoire s'il contient encore un fichier et comme tu laisses en places les fichiers '.*' ...
En effet si le fichier $folder/.profile existe :
subfold=$folder/.profile
[ ! -f $subfold ]= Faux
[ -d $subfold ] = Faux
[ ! -f $subfold ] || [ -d $subfold ] = Faux
Donc rm -rf $folder
 
Si tu veux supprimer le contenu du répertoire s'il ne contient plus de fichiers ni de sous-répertoire :
if [ -z "$(ls -1a $folder) ] ; then
   rm -rf $folder
fi


---------------
Jean Pierre.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Script qui fonctionne, mais

 

Sujets relatifs
Créer un petit menu dans un script bashserveur, script inscription automatique
[script sh] tester si une partition est montée?Script + droit root
Un petit peu d'aide avec un petit script bashscript perl pour irssi
script de reconnection[ Logiciels / Script ] Outils pour le MP3 / OGG et script pour LAME
[Debian Woody]Mon script iptables fonctionne poPetit Script Iptable qui ne fonctionne pas
Plus de sujets relatifs à : Script qui fonctionne, mais


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR