Faust Posted January 18, 2004 Share Posted January 18, 2004 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? #!/bin/bash echo Quel dossier voulez vous nettoyer? read folder for folder in `find -type d`; do for fichier in $folder/*; do if [ -f $fichier ]; then mv $fichier $folder else echo blabla fi done done Link to comment Share on other sites More sharing options...
gauret Posted January 18, 2004 Share Posted January 18, 2004 #!/bin/bashecho Quel dossier voulez vous nettoyer? read folder for folder in `find -type d`; do Et hop tu viens d'écraser ta variable "folder"... for fichier in $folder/*; do if [ -f $fichier ]; then mv $fichier $folder else echo blabla fi done done J'ai pas trop compris ce que tu veux faire, mais je te propose ça : Si tu veux déplacer récursivement tous les fichiers d'un dossier A dans un dossier B : find dossier_A -type f -exec mv {} dossier_B \; Et c'est tout. C'était bien ça ? A+ Gauret Link to comment Share on other sites More sharing options...
Angel Eyes Posted January 18, 2004 Share Posted January 18, 2004 #!/bin/bashecho Quel dossier voulez vous nettoyer? read folder for folder in `find -type d`; do Et hop tu viens d'écraser ta variable "folder"... for fichier in $folder/*; do if [ -f $fichier ]; then mv $fichier $folder else echo blabla fi done done J'ai pas trop compris ce que tu veux faire, mais je te propose ça : Si tu veux déplacer récursivement tous les fichiers d'un dossier A dans un dossier B : find dossier_A -type f -exec mv {} dossier_B \; Et c'est tout. C'était bien ça ? A+ Gauret mv dossier_A dossier_B, c'est pas plus simple ?? Link to comment Share on other sites More sharing options...
gauret Posted January 19, 2004 Share Posted January 19, 2004 mv dossier_A dossier_B, c'est pas plus simple ?? Nope, parce qu'un simple mv dossier_A dossier_B ça conserve les sous répertoires de A. Si j'ai bien compris, il veut "mettre à plat" le dossier : tous les fichiers de dossier_A et de tous ses sous-répertoires doivent se retrouver directement à la racine de dossier_B. Mais c'est peut-être pas ça que cherche à faire Faust en fait. Non ? A+ Gauret Link to comment Share on other sites More sharing options...
Angel Eyes Posted January 19, 2004 Share Posted January 19, 2004 c'est très bizarre comme manipulation... Link to comment Share on other sites More sharing options...
Sandeman Posted January 20, 2004 Share Posted January 20, 2004 Nanan, la commande find c'est le couteau suisse du bricolage dans les arborescences de fichiers. Du bonheur avec un \; à la fin ... Link to comment Share on other sites More sharing options...
Faust Posted January 20, 2004 Author Share Posted January 20, 2004 dur de savoir si on a des réponses...le forum m'envoit rien dans mon courriel... bon, la manip peut sembler étrange, c'est pour un travail pratique. J'en connais pas beaucoup sur Linux, et encore moins sur les scripts, mais bon, à force de lire et de lire j'en suis arrivé à ce que j'ai écrit plus haut... à force d'essayer j'ai aussi boussiller ma machine, mais ca c'est autre chose... le vrai problème c'est : "Faire un script en Shell du nom de cleandir avec un nombre variable de paramètres qui sont des 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." Alors j'imagine qu,avec find dossier_A -type f -exec mv {} dossier_B \; , je devrais rajouter un " if fichier du dossier_A=fichier du dossier_B cat fichier_A >> fichier_B et if folder_A est vide rm -f" Link to comment Share on other sites More sharing options...
NiTrOuS Posted January 20, 2004 Share Posted January 20, 2004 La commande find: find repertoire de départ [critères] [options de commande] La commande find permet de rechercher un fichier dans l arborescence à partir du répertoire spécifié, et ce de manière récursive. Si aucune indication n'est faite, la commande find cherche tous les fichiers. Il est cependant possible de mentionner des options de recherche pour limiter celle-ci. Si cette commande a trouvé un fichier correspondant au critère, il est traité par les options de commande. Si aucune option n'est mentionnée, il ne se passe rien. Comme option de commande, vous pouvez utiliser -print, -exec et -ok. Voici quelques options de choix utilisables pour limiter la recherche: -name fichier recherche par nom de fichier (metacaractères autorisés) -type type recherche par type de caractère -user nom recherche par propriétaire -perm droits recherche par droits d acces Voilà j espere que mon explication de la commande find est claire Link to comment Share on other sites More sharing options...
Sandeman Posted January 20, 2004 Share Posted January 20, 2004 dans le cas de ton TP, alors, plutôt qu'un mv tu fais un bête cat /repsource/fichier >> /fichier (si le fichier existe, concat, sinon, create :) kekvous pensez de ça ? #!/bin/sh # tant que le premier paramètre n'est pas vide while [ -n $1 ] do # je recupère tous les fichiers du répertoire (bon OK tous les fichiers avec des noms "normaux") list=`ls $1` for i in $list do # je concatène vers le repertoire local, nom de fichier courant (merci basename) cat $i >> `basename $i` # en option, je vire le fichier copié rm $i done # je décale mes arguments de 1 ( $2 devient $1, etc. plus élégant qu'un for dans $#) # on pourrait faire + élegant et - lisble avec une condition sur le code retour de shift :) shift 1 done Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.