Un petit peu d'aide avec un petit script bash

Un petit peu d'aide avec un petit script bash - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 18-01-2004 à 17:06:14    

j'arrive pas à voir ce qui marche pas la dedans...  
 
Le but est de prendre tout les fichiers dans le sous répertoire et les mettre dans le répertoire parent...  
 
QQ'un peut m'enligner un peu?  
 

Code :
  1. #!/bin/bash
  2. echo Quel dossier voulez vous nettoyer?
  3. read folder
  4. for folder in `find -type d`; do
  5. for fichier in $folder/*; do
  6. if [ -f $fichier ]; then
  7. mv $fichier $folder
  8. else echo blabla
  9. fi
  10. done
  11. done

Reply

Marsh Posté le 18-01-2004 à 17:06:14   

Reply

Marsh Posté le 18-01-2004 à 17:19:11    


mv folder/* folder/../  :??:  :??:

Reply

Marsh Posté le 18-01-2004 à 20:35:37    

euh....

Reply

Marsh Posté le 18-01-2004 à 20:39:14    

Euh... tu essaies de faire quoi avec ce script ?

Reply

Marsh Posté le 18-01-2004 à 20:40:51    

ArSuniK a écrit :

Euh... tu essaies de faire quoi avec ce script ?
 


Citation :

Le but est de prendre tout les fichiers dans le sous répertoire et les mettre dans le répertoire parent...  



---------------
Intermittent du GNU
Reply

Marsh Posté le 18-01-2004 à 20:43:37    

Si tu veux que les fichier de TOUS les sous reps soient mis dans le rep parent
find folder -type f -exec mv {} folder/../ \;
 
Je pense que ce qui ne marche pas dans ton script c est la premiere boucle for. Mais soit plus precise sur ce que tu veux faire avec ton script

Reply

Marsh Posté le 18-01-2004 à 20:48:41    

j'ai essayer avec ca mv folder/* folder/../ mais ca ne donne pas l'effet escompter...
 
le script doit avoir un nombre variable de paramètres qui sont pour les répertoires existants dans le répertoire courant. Pour chacun des répertoires nommés, le script doit déplacer tous ses fichiers au répertoire courant. Si les noms des fichiers sont identiques, le script doit concatener les fichiers sous un même nom dans le répertoire courant. Quand les répertoires nommés sont vides, ils doivent être détruits..
 
Il doit pas en manquer beaucoup à ce que j'ai fait, mais remarquer je débute alors j'ai un peu de mal à voir...

Reply

Marsh Posté le 18-01-2004 à 20:54:53    

cd $folder
cd ..
mv $folder/* .


---------------
Intermittent du GNU
Reply

Marsh Posté le 18-01-2004 à 20:58:34    

mikala a écrit :

cd $folder
cd ..
mv $folder/* .
 


 
Je crois que ca bousiller ma machine  :heink:

Reply

Marsh Posté le 18-01-2004 à 21:01:53    

effectivement...je dois réinstaller linux....

Reply

Marsh Posté le 18-01-2004 à 21:01:53   

Reply

Marsh Posté le 18-01-2004 à 21:03:15    


 :heink:

Reply

Marsh Posté le 18-01-2004 à 21:03:45    

_Faust_ a écrit :


 
Je crois que ca bousiller ma machine  :heink:  


 :??:  

1:01 mikala@andrea ~% cd test
21:01 mikala@andrea ~/test% mkdir test
21:01 mikala@andrea ~/test% cd test
21:01 mikala@andrea ~/test/test% touch toto
21:01 mikala@andrea ~/test/test% touch titi
21:01 mikala@andrea ~/test/test% cd ..
21:01 mikala@andrea ~/test% vi script
21:02 mikala@andrea ~/test% cat script
#!/bin/sh
echo Quel dossier voulez vous nettoyer?
read folder
cd $folder
cd ..
mv $folder/* .
 
21:02 mikala@andrea ~/test% ls -al test
total 0
drwxr-xr-x  2 mikala mikala 96 jan 18 21:01 ./
drwxr-xr-x  3 mikala mikala 96 jan 18 21:02 ../
-rw-r--r--  1 mikala mikala  0 jan 18 21:01 titi
-rw-r--r--  1 mikala mikala  0 jan 18 21:01 toto
21:02 mikala@andrea ~/test% sh script
Quel dossier voulez vous nettoyer?
test
21:02 mikala@andrea ~/test% ls
script  test/  titi  toto
21:02 mikala@andrea ~/test% ls -al test
total 0
drwxr-xr-x  2 mikala mikala  48 jan 18 21:02 ./
drwxr-xr-x  3 mikala mikala 144 jan 18 21:02 ../
21:02 mikala@andrea ~/test%


Message édité par mikala le 18-01-2004 à 21:04:19

---------------
Intermittent du GNU
Reply

Marsh Posté le 18-01-2004 à 21:07:28    

je sais pas, j'ai tapé ces commandes cd $folder  
cd ..  
mv $folder/*  
 
mais pas dans un script...faut croire qu'il a pas aimé ca...
 
mais c'est pas grave, c'est un environnement de test, et ca roule même sur VMware...
 

Reply

Marsh Posté le 18-01-2004 à 21:08:03    

bon tu nous expliques comment tu as cassé ta distribution la ?
tu n'étais pas en root pour faire ton script quand meme ?


---------------
Intermittent du GNU
Reply

Marsh Posté le 18-01-2004 à 21:09:28    

_Faust_ a écrit :

je sais pas, j'ai tapé ces commandes cd $folder  
cd ..  
mv $folder/*  


 
et yavait koi dans ta variable $folder ???

Reply

Marsh Posté le 18-01-2004 à 21:14:32    

j'était en root, dans /root/test
ls
1 2 3 4 5 6 7 patate patate1 1.sh 2.sh 3.sh test.sh
 
j'ai tapé cd $folder  
cd ..  
mv $folder/*  
 
et voilà....
 
bon, je suis entrain de réinstaller là et je vais vérifier le tout...

Reply

Marsh Posté le 18-01-2004 à 21:16:00    

tu comprends donc la necessité de ne _pas_ etre en root _sauf_ strict necessaire.


---------------
Intermittent du GNU
Reply

Marsh Posté le 18-01-2004 à 21:29:11    

ouai, effectivement, c'est bien la première chose qu'on apprend...
 
mais....dans le script ca aurait pas fait la même chose?

Reply

Marsh Posté le 18-01-2004 à 21:32:07    

hahahaha....le con....comme vous devez rire...
 
entk, moi je suis plié en 2...
 
aller, on lâche pas....
 
Bon, s'il y a des bons samaritains qui aide les universitaires en première session, on lève la main!!

Reply

Marsh Posté le 18-01-2004 à 21:39:49    

_Faust_ a écrit :

ouai, effectivement, c'est bien la première chose qu'on apprend...
 
mais....dans le script ca aurait pas fait la même chose?  


justement non cela n'aurait pas fait la meme chose.
cela n'aurait fait que ce que tu as demandé .
a savoir allez au repertoire indiqué , remonter d'un repertoire déplace les fichier du premier repertoire dans le repertoire actuel .
la tu la executer dans un shell on ne sais meme pas qu'elle était la valeur de la variable $folder ...


---------------
Intermittent du GNU
Reply

Marsh Posté le 18-01-2004 à 22:04:45    

dès que je fini mon installation, je réessai ca....
 
il me manquerai quoi par la suite, une comparaison et si la valeur est vraie, je fait un cat ?
 
genre ,euh... if fichier_dans_sous_rep = fichier_dans_rep
                 then cat fichier_dans_sous_rep >> fichier_dans_rep

Reply

Marsh Posté le 21-01-2004 à 13:24:01    

Voici un script qui fait le nettoyage que tu veux faire.
On lui spécifie un répertoire racine à nettoyer.
Tous les fichiers des sous-répertoires sont remontés à la racine. Sin un fichier de même nom existe déjà, les deux fichiers sont concatanés.
Les sous-répertoire ainsi vidés sont détruits.
 

Code :
  1. #
  2. # Récupération dossier à nettoyer
  3. #
  4. folder=$1
  5. while [ -z "$folder" ]
  6. do
  7.    read -p "Dossier à nettoyer ? " folder
  8. done
  9. #
  10. # On se positionne dans le dossier à nettoyer
  11. #
  12. if [ -d "$folder" ]
  13. then
  14.    cd "$folder"
  15. else 
  16.    echo "Erreur - Dossier inexistant."
  17.    exit 1
  18. fi
  19. #
  20. # Tous fichiers des sous-répertoires du dossier
  21. # racine à nettoyer sont remontés à la racine et
  22. # les sous-répertoires sont détruits.
  23. #
  24. find * -type d -prune | \
  25. while read subdir
  26. do
  27.    #
  28.    # Les fichiers du sous-répertoires sont déplacés
  29.    # à la racine
  30.    #
  31.    find $subdir -type f | \
  32.    while read file
  33.    do
  34.       name=${file##*/}
  35.       if [ -f ./$name ]
  36.       then
  37.          # Le fichier existe déjà à la racine
  38.          # on concatene les deux
  39.          cat $file >> ./$name
  40.          rm  $file
  41.       else
  42.          # Le fichier est déplacé à la racine
  43.          mv  $file .
  44.      fi
  45.    done
  46.    #
  47.    # Le sous-répertoire est maintenant vide,
  48.    # on peut le supprimer
  49.    #
  50.    rm -rf $subdir
  51. done

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed