Forum Linux.général Renommer les fichiers dans lost+found

Posté par  .
Étiquettes : aucune
0
15
juil.
2004
Est-ce que quelqu'un connait un script qui permet de déterminer le type des fichiers dans lost+found et de les renommer en conséquence ?

J'ai environ 2000 fichiers ayant des noms du style "#886488"
Le fait de pouvoir les renommer en ajoutant l'extention correspondante au type simplifierais la récupération...

On pourrait faire quelque chose avec la commande "file" mais il y a tellement de types que je ne veux pas m'amuser à les énumérer tous !

# file *
...
#804386: ASCII English text, with CRLF line terminators
#804387: MP3 file with ID3 version 2.3.0 tag
#820822: TeX transcript text
#820823: data
#820825: MS-DOS batch file text
#820833: ASCII text, with CRLF line terminators
#820956: PDF document, version 1.5
...
  • # script shell

    Posté par  . É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"


Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.