Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/11/2010, à 16:46

Link_Octree

[Shell] Lister des dossiers, et se rendre dans ces derniers

Bonjour,
J'ai une tâche assez ingrate à réaliser sur un grand nombre de fichiers, et je me sens vraiment pas de faire tout à la main, du coup je vais tenter de la faire en shell, seulement vu que j'y connais presque rien j'ai du mal tongue

J'ai un répertoire /home/user/dossier qui comptiens un grand nombre de sous dossiers.
Je sais lister ces dossiers avec ls, je sais me rendre manuellement dans ces dossiers avec cd.

Je voudrais me rendre sucessivement dans tous les sous-dossiers, et faire une action (un renommage mais çà, je sais le faire) puis passer au sous-dossier suivant.

Quelqu'un aurait une piste sur la démarche à suivre ? Plutot que dme balancer le code, j'aimerai comprendre la démarcher vu que çà sera pas le dernier script shell que jserai amener à écrire ^^

Merci bcp wink

Hors ligne

#2 Le 09/11/2010, à 17:36

chopinhauer

Re : [Shell] Lister des dossiers, et se rendre dans ces derniers

Tu peux faire par exemple un :

for i in `find /home/user/dossier -type f`; do
    mv -i "$i" nouveau_nom
done

Pour comment calculer le nouveau nom à partir de l'ancien regarde le chapitre Remplacements des paramètres de la page de manuel de bash. Pour des opérations plus complexes tu peux apprendre les expressions régulières et utiliser sed.

Dernière modification par chopinhauer (Le 09/11/2010, à 17:41)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#3 Le 09/11/2010, à 22:16

Link_Octree

Re : [Shell] Lister des dossiers, et se rendre dans ces derniers

En fait, je suis parti sur une autre méthode qui me servira aussi pour d'autres choses:

cd /home/user/dossier
ls >> list.txt

first=`head -n1 list.txt`

    cd first
    echo `pwd`

#sed 1d list.txt -i

Le echo est temporaire tongue
Ca pêche au niveau du cd first, car mes dossiers comportent des espaces hmm

Il me faudrait un bout de code pour stocker directement les noms de fichier du ls entre des "". Soit un code pour rajouter les "" autour du nom du dossier avant le cd first.
Dans l'immédiat, jsais pas faire hmm Quoi qu'il en soit, merci wink

Dernière modification par Link_Octree (Le 10/11/2010, à 11:50)

Hors ligne

#4 Le 10/11/2010, à 00:49

chopinhauer

Re : [Shell] Lister des dossiers, et se rendre dans ces derniers

cd "$first"

et n'oublie pas le dollar devant les variables.

Si tu veux utiliser cette route, tu peux faire une fonction récursive qui lit les fichiers d'un répertoire et si elle rencontre un sous-répertoire elle fait un pushd (qui ajoute le répertoire au stack et change de répertoire) et s'exécute à nouveau :

shopt -s dotglob nullglob
recursive () {
    local i
    for i in *; do
        if [ -d "$i" ]; then
            pushd "$i" >/dev/null
            recursive
            popd >/dev/null
            # opération sur le répertoire
            pwd
            #
        else
            # opération sur les fichier normaux
            echo -n
            #
        fi
    done
}

recursive

PS: Bien sur cela n'est pas très utile, car find -execdir fait presque la même chose.

Dernière modification par chopinhauer (Le 10/11/2010, à 00:55)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne