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 11/03/2012, à 19:41

snake57

traitement de fichier

Bonjour à tous,

J'ai un petit problème qui je pense peux être réglé en quelques lignes de commandes,  mais je ne sais pas faire...

Je vous explique, j'ai fais une récupération sur un disque dur.
Ce qui m'a créé plusieurs dossiers nommer recup_dir.1, recup_dir.2, recup_dir.3, etc
Dans tous ces dossiers se trouvent les fichiers qui ont été trouvés par l'outil de récupération.
Le problème c'est qu'ils sont la dedans en vrac.

Donc j'aimerais pouvoir créer autant de répertoire qu'il n'y a d'extension dans les fichiers que j'ai récupéré. Par exemple le dossier dir_jpg contiendra tous les *.jpg ou encore dir_txt contiendra tous les *.txt

Faire ça à la main me prendrais énormément de temps... Donc si y'a possibilité de faire ça en quelques lignes de commandes je suis intéressé.

Et si en plus vous pouvez m'expliquer les commandes utilisé ça serait le top wink

Merci


Toshiba Satellite L775-11N

Hors ligne

#2 Le 11/03/2012, à 19:52

sputnick

Re : traitement de fichier

Ceci devrais convenir, c'est basé sur le type mime :

#!/bin/bash
# made by sputnick 20110502
# Version du script de Levi59 amélioré -> http://forum.kubuntu-fr.org/viewtopic.php?id=456701

## DOSSIERS
# permet de trier le premier fichier de chaque répertoire en argument

IMAGES="/chemin/vers/dossier/images"
VIDEOS="/chemin/vers/dossier/videos"
AUDIO="/chemin/vers/dossier/audio"
# AUTRES A COMPLETER...

# pas besoin de faire "for REP in; do",
# bash va lire directement les répertoires
# donnés en paramètre.
for REP; do
    c=0
    go=true
    if [[ ! -d "${REP}" ]]; then echo >&2 "${REP} n'est pas un repertoire tudjuuu ! On quitte..."; exit 1; fi

    # on utilise un array (tableau, matrice) pour pouvoir
    # traiter le premier fichier du répertoire
    ARR=( ${REP}/* )

    # tant que l'on ne trouve pas un fichier (au lieu d'un sous répertoire),
    # on boucle et on itère le compteur $c
    while [[ ! -f "${ARR[c]}" && -e "${ARR[c]}" ]]; do ((c++)); done

    # si le while a trouvé un fichier ok,
    # sinon on switch de répertoire
    [[ -f "${ARR[c]}" ]] || continue

    # on utilise directement la sortie de la commande file
    # pour chercher son vrai type
    # indépendamment de l'extension.
    # Voir "man 1 file"
    case $(file "${ARR[c]}") in
        *Video*) DEST="${VIDEOS}";;
        *image*) DEST="${IMAGES}";;
        *Audio*) DEST="${AUDIO}";;
        # a completer, faire "file <FICHIER>" pour voir son type...
        *) go=false; echo >&2 "Format inconnu pour ${ARR[c]}" ;;
    esac

    # -i demande confirmation avant d'écraser un fichier
   [[ $go = true ]] && mv -i "${ARR[c]}" "${DEST}"
done

Tu peux ajouter des cas dans le case si ya d'autres types de fichiers.
Ca s'utilise comme ça :

./script recup_dir.*/*.*

Sinon basé comme tu le propose avec l’extension en bash ( qui est dans ce cas obligatoire ):

for i in recup_dir.*/*.*; do
    [[ -d $i || $i != *.* ]] && continue
    mkdir -p "${i##*.}"
    echo mv "$i" "${i##*.}"
done

Tu enlevera le echo si c'est bon.

Dernière modification par sputnick (Le 11/03/2012, à 20:04)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 11/03/2012, à 19:59

Bousky

Re : traitement de fichier

En te plaçant dans le dossier contenant les dossiers recup_dir.X (cd dossier) :

for fichier in recup_dir.*/*.*
do
dir=dir_${fichier##*.}
mkdir -p $dir
mv -i "$fichier" $dir
done

Dernière modification par Bousky (Le 11/03/2012, à 20:00)


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#4 Le 11/03/2012, à 20:49

vincentp010

Re : traitement de fichier

Vu le nom des répertoires je suppose que tu as utilisé la suite testdisk.
Sur le wiki du projet il y a quelques scripts pour trier les fichiers
http://www.cgsecurity.org/wiki/Apr%C3%A … e_PhotoRec


Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go

Hors ligne

#5 Le 11/03/2012, à 23:48

snake57

Re : traitement de fichier

Bousky a écrit :

En te plaçant dans le dossier contenant les dossiers recup_dir.X (cd dossier) :

for fichier in recup_dir.*/*.*
do
dir=dir_${fichier##*.}
mkdir -p $dir
mv -i "$fichier" $dir
done

Merci beaucoup, cela a bien fonctionné


Toshiba Satellite L775-11N

Hors ligne