Script #bash tri de fichier par extension

Fermé
kevin76110 Messages postés 4273 Date d'inscription vendredi 14 août 2009 Statut Membre Dernière intervention 27 mars 2013 - Modifié par kevin76110 le 25/03/2011 à 14:40
kevin76110 Messages postés 4273 Date d'inscription vendredi 14 août 2009 Statut Membre Dernière intervention 27 mars 2013 - 25 mars 2011 à 18:16
Bonjour,

J'ai, à la suite du récupération de fichier avec test disk, dees milliers de fichiers dans des dossiers que j'aimerais trier en fonction de leur extention : par exemple, dans le dossier 1 mettre tous les .pdf, dossier 2 tous les .jpg etc.

J'ai trouvé ceci :

#!/bin/bash
# script pour réorganiser une arborescence rapidement
#
# Copyright (C) 22 Jan. 2011, Rombeaut Rodolphe
# http://scriptam.over-blog.com/
# Released into the public domain.

ORIG="/répertoire à trier"
DEST="/répertoire de destination"

# ------------------------
# Partie à ne pas toucher
# ------------------------

ORIG=${ORIG%/}
DEST=${DEST%/}

find $ORIG/ -regextype "posix-extended" -depth -type f -regex ".*" | while read fichier ; do
a=$(file -ib "${fichier}")
[ -d "$DEST/${a%%/*}" ] || mkdir -p "$DEST/${a%%/*}"
mvfichier=${fichier##*/}
[ "${fichier%/*}" != "$DEST/${a%%/*}" ] && {
[ -f "$DEST/${a%%/*}/${mvfichier}" ] && {
b=1
while [ -f "$DEST/${a%%/*}/copie${b}___${mvfichier#*___}" ] ; do ((b++)) ; done
mv "${fichier}" "$DEST/${a%%/*}/copie${b}___${mvfichier#*___}"
} || mv "${fichier}" "$DEST/${a%%/*}/${mvfichier}"
}
done
find $ORIG/ -type d -exec rmdir 2>/dev/null {} \;

exit




ici : http://scriptam.over-blog.com/...

J'aimerais savoir si c'est bien ce que je recherche.
Bonne aprem à vous,

Kévin

___


°º¤ø,¸¸,ø¤º°'°º¤ø, Contributeur CCM °º¤ø,¸¸,ø¤º°'°º¤ø,
c'est pas parce que la solution ne vous plait pas qu'il faut mettre -1, c'est juste quand elle est inutile qu'il faut en mettre.
A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
25 mars 2011 à 15:08
Salut,

A quelque chose prêt, oui, mais... parce qu'il y a un mais ;-\

Les fichiers ne sont pas trié en fonction de leur extension (pdf, jpg, txt, etc.) mais en fonction de leur type (image, audio, vidéo, texte, etc.), ce qui n'est pas trop gênant en fin de compte.

Par contre, la dernière ligne "find $ORIG/ -type d -exec rmdir 2>/dev/null {} \; " supprime tous les répertoires d'origine et les fichiers qu'ils contiennent une fois le tri terminé ;-\

Je ne pense pas que ce soit ce que tu veux, du moins tant que tu n'es pas sûr d'avoir vraiment fait le tri...
0
kevin76110 Messages postés 4273 Date d'inscription vendredi 14 août 2009 Statut Membre Dernière intervention 27 mars 2013 872
25 mars 2011 à 15:19
Merci de ta réponse =)A la limite je m'en fout que les fichiers soient détruits, s'ils sont copié ou déplacés quelque part.
Mais je vais quand même la retirer par sécurité.
Le trie ainsi n'est pas trop mal.

Si je mets ceci :

ORIG="/répertoire à trier"
DEST="/répertoire de destination"


ORIG=${ORIG%/}
DEST=${DEST%/}

find $ORIG/ -regextype "posix-extended" -depth -type f -regex ".*" | while read fichier ; do
a=$(file -ib "${fichier}")
[ -d "$DEST/${a%%/*}" ] || mkdir -p "$DEST/${a%%/*}"
mvfichier=${fichier##*/}
[ "${fichier%/*}" != "$DEST/${a%%/*}" ] && {
[ -f "$DEST/${a%%/*}/${mvfichier}" ] && {
b=1
while [ -f "$DEST/${a%%/*}/copie${b}___${mvfichier#*___}" ] ; do ((b++)) ; done
mv "${fichier}" "$DEST/${a%%/*}/copie${b}___${mvfichier#*___}"
} || mv "${fichier}" "$DEST/${a%%/*}/${mvfichier}"
}
done

exit


Ca triera bien ?

(désolé je débute un peu en bash ^^)


0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
25 mars 2011 à 15:55
Oui logiquement ça devrait le faire...

De toute façon, vu que tu as retiré la partie de suppression, tu ne risques rien à l'essayer ;-))
0
kevin76110 Messages postés 4273 Date d'inscription vendredi 14 août 2009 Statut Membre Dernière intervention 27 mars 2013 872
25 mars 2011 à 18:16
Au pire je vais tester avec seulement 2 ou 3 dossiers et quelques fichiers.

Je teste ce soir ;)
0