• # script shell

    Posté par . En réponse au message Renommer les fichiers dans lost+found. Évalué à 5.

    Il y a quelques temps, aprés avoir testé un gestionnaire de fichiers en version pré-alpha, j'ai perdu ~30000 fichiers/2Go. je les avait récupéré grace à recover. Ils portaient tous ensuite un nom : INODE_XXX.
    J'avais donc fait un petit script bash qui crée un repertoire par type, et déplace les fichiers de ce type à l'interieur. Avec quelques modifications tu peux lui faire en plus rajouter les bonnes extentions.

    Je te file le script tel quel, mais si c'etait à refaire, j'utiliserais plutôt la commande file -i qui donne le type mime et ensuite, à partir du type mime, j'irai chercher l'extention correspondante dans le fichier /usr/share/mime/globs (shared-mime-info de freedesktop.org)








    #!/bin/bash
    CWD=`pwd`
    LOG_FILE="$CWD/log.txt"
    DEBUG="1"
    [ "$DEBUG" = "1" ] && touch $LOG_FILE
    date > $LOG_FILE
    for i in *; do
    FULLPATH="$CWD/$i"
    [ "$DEBUG" = "1" ] && echo "Trying to identify $i ..."
    file_type=`file -b "$FULLPATH" | cut -d"," -f1 | tr " " "_"`
    [ "$DEBUG" = "1" ] && echo "->file type is : $file_type"
    if [ ! "$file_type" = "" ]; then
    [ "$DEBUG" = "1" ] && echo "OK, file_type ($file_type) n'est pas vide"
    if [ -f "$FULLPATH" ]; then
    [ "$DEBUG" = "1" ] && echo "OK, le fichier ($FULLPATH) est un fichier regulier"
    if [ -d "$CWD/$file_type" ]; then
    [ "$DEBUG" = "1" ] && echo "OK, le repertoire $CWD/$file_type existe déjà"
    [ "$DEBUG" = "1" ] && echo "copie du fichier ($FULLPATH) vers $CWD/$filetype"
    mv "$FULLPATH" $CWD/$file_type || echo "la copie de $FULLPATH vers $CWD/$file_type à echoué" >> $LOG_FILE
    else
    [ "$DEBUG" = "1" ] && echo "! Le repertoire $CWD/$file_type n'existe pas !"
    [ "$DEBUG" = "1" ] && echo "creation du repertoire $CWD/$file_type"
    mkdir $CWD/$file_type || echo "la creation du repertoire $CWD/$file_type à echoué" >> $LOG_FILE
    [ "$DEBUG" = "1" ] && echo "copie du fichier ($FULLPATH) vers $CWD/$filetype"
    mv "$FULLPATH" $CWD/$file_type || echo "la copie de $FULLPATH vers $CWD/$file_type à echoué" >> $LOG_FILE
    fi
    else
    [ "$DEBUG" = "1" ] && echo "! le fichier ($FULLPATH) n'est pas un fichier regulier !"
    fi
    else
    [ "$DEBUG" = "1" ] && echo "OK, file_type ($file_type) est vide"
    fi
    done
    IFS=$'\r'; var="$(<$LOG_FILE)";
    [ "$DEBUG" = "1" ] && echo -e "\nIl y a eu ${#var} erreurs pendant l'operation"