Script bash pour copier arborescence avec fichier convertis.

Erreur lors de la copie de l'arborescence pour certains nom de fichiers

a marqué ce sujet comme résolu.

Hello tout le monde :D

J’ai un disque dur externe avec pleins de fichiers audio en flac rangés comme ceci :

Mes Fichiers
├── Artiste-1
│   ├── Album-1
│   │   └── musique
│   └── Album-2
│       └── musique
└── Artiste-2
    ├── Album-1
    │   └── musique
    └── Album-2
        └── musique

Le problème c’est que les musiques sont en flac, et je compte les garder avec cette qualité. Ainsi quand je veut les mettre sur mon téléphone je dois aller dans chaque dossier puis convertir les musiques et ça prend beaucoup de temps alors qu’on pourrait le faire en une fois avec un script Bash et en gardant la même arborescence des dossiers.

C’est ce que j’ai fait ! Et ça marche ! Dans une certaine mesure… :o

En effet lors de la copie de l’arborescence, sur certains de mes dossiers il y a un bug : le nom du dossier s’écrit en partie et cela, semble à première vu ne pas suivre une quelconque logique (ce qui est impossible en informatique)

Par exemple au lieu d’avoir un dossier "Pink_Floyd" il créé un dossier "Floyd" ou "Loyd". Parfois il crée bien le dossier "Pink_Floyd" mais aussi le dossier "Loyd" en voulant mettre les musiques dans ce dernier.

Voici mon script Bash au cas ou vous arrivez à trouver ce qui ne vas pas

#!/bin/bash

# Changer la définition du changement de ligne
IFS=$'\n' 

# Definir le format voulu par l'utilisateur, et ses valeurs par défaut
format=${1:-opus} bitrate=${2:-256k} format_start=${3:-flac} 

# créé un fichier temporaire pour boucle (et debug)
find -type d > .File_parameter; 

# boucler sur .File_Parameter
while read fdir;
do
    # créer le nom de la nouvelle arborescence
    new_dir="$(echo $PWD)_$format/$fdir"; 
    # la mettre en oeuvre
    mkdir -p $new_dir;

    for i in $fdir/*.$format_start;
    do
        # créer le nom du nouveau fichier pour ffmpeg
        new_file="${i%.$format_start}.$format";
        #convertir et masquer les lignes ffmpeg
        ffmpeg -i "${i%.$format_start}.$format_start" -ab $bitrate $new_file >/dev/null 2>&1;
        mv $new_file $new_dir;
    done;
    echo "$new_dir à été copié et converti";
done < .File_parameter;

rm .File_parameter;

En tout cas je n’y arrive plus, depuis le début de cet aprem je suis dessus et je n’arrive pas à trouver l’erreur. Mais j’ai une hypothèse : c’est que Bash compte certains caractères comme des caractère spéciaux.

Merci d’avance pour votre aide !

Salut,

Le soucis viens de la commande ffmpeg. En effet, elle lit également des données en entrée et du coup fout le boxon au niveau de ce que lit bash. Tu peux résoudre le soucis simplement en redirigeant l’entrée standard de ffmpeg. ;)

ffmpeg -i "${i%.$format_start}.$format_start" -ab $bitrate $new_file 0<>/dev/null >&0 2>&0
+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte