• [^] # Re: Solution brutale & quelques trucs

    Posté par . En réponse au message Petit script de renommage de vidéos avec petits soucis. Évalué à 3.

    La commande find est utilisée parfois pour protéger les noms de fichiers (-print0), et ls aussi avec l’option qui permet d’échapper les caractères spéciaux en sortie. On peut aussi regarder du côté de la variable shell IFS et les options de la commande read (-d en bash ?).

    Mais je dois dire que je prends toujours soin d’utiliser des noms de fichiers pas trop emmerdants... pour pas avoir à trop me prendre la tête avec ça.

    Pour en revenir à la problématique initiale. Faut faire une boucle qui sort l’horodatage et le nom du fichier source dans un fichier temporaire. En pseudo-script shell :

    tmp=`mktemp`
    for src in *.mp4
    do [...] echo $horodatage $src >>$tmp
    done
    [...]
    sort $tmp | while read horodatage src
    do
     [...]
     mv $src $dst
    done
    rm $tmp

    Si t’es motivé tu peux chaîner aussi les boucles while ou for à travers des pipe, pour ne pas avoir à créer un fichier temporaire ^^ :

    for src in *.mp4
    do
     [...]
     echo [...x...]
    done \
    | sort \
    | while read [...x...]
    do
     [...]
    done

    Mets ton nom de fichier en fin de ligne, comme ça la présence d’espaces dedans sera plus simple à gérer au besoin.

    S’arranger pour que l’horodatage soit dans un format directement triable (année-mois-jour-heure-minutes-secondes(.fraction) ou timestamp Unix).