#1651 Le 31/01/2013, à 16:30
- Bousky
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
je veux copier le fichier aaa_bbb_ccc.mp4 dans le répertoire aaa/bbb/ccc
et le fichier ddd_eee_fff.mp4 dans le répertoire ddd/eee/fff
Supposons que le nom du fichier est dans la variable fichier (par exemple à mettre dans un « for fichier in ... ») :
dossier=${fichier%.*} # supprime l'extension
dossier=${dossier//_//} # remplace les _ par des /
mkdir -p "$dossier" # crée le dossier si besoin
cp "dossier/source/$fichier" "$dossier"
je voudrait faire un traitement sur les fichiers dont l'extension est renseignée dans mon fichier texte.
Supposons que tu ai bien une seule extension par ligne (en pas d'espaces avant ou après, ni de lignes vides) :
while read ext ; do
for fichier in *."$ext" ; do
# faire un truc sur $fichier
done
done < ficher/contenant/les/extensions
Dernière modification par Bousky (Le 31/01/2013, à 16:33)
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
#1652 Le 12/02/2013, à 17:54
- om77j
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
bonjour à tous
Afin de pouvoir lire les fichier MKV avec un son DTS sur la freebox V5 il faut pour cela modifier le DTS en AC3.
J'ai testé et pour ceux qui sont intéresses, je peux transmettre un petit tuto.
Mon soucis est qu'il faut faire plusieurs ligne de commande et étant complétement novice dans le script.
Donc je suis à la recherche d'un script pouvant automatiser ces actions ou bien quelqu'un qui peut m'aider à le créer
merci par avance
Hors ligne
#1653 Le 12/02/2013, à 18:57
- ljere
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
ce script existe déjà om77j voir ici http://h264tobox.free.fr/
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#1654 Le 12/02/2013, à 18:57
- Qid
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Mon soucis est qu'il faut faire plusieurs ligne de commande et étant complétement novice dans le script.
Donc je suis à la recherche d'un script pouvant automatiser ces actions ou bien quelqu'un qui peut m'aider à le créer
bah... À la base un script n'est rien de plus qu'un enchaînement de commande... surtout en bash...
Une commande de terminal par ligne dans un fichier exécutable via la commande: sh nomdufichier
Et le tour est joué... C'est pas beaucoup plus compliqué en fait... Surtout quand tu as déjà les commandes...
"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil
Hors ligne
#1655 Le 13/02/2013, à 09:43
- om77j
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Merci ljere
Effectivement j'avais vu ce script pendant mes recherches mais je ne me suis pas penché dessus.
Je vais regarder si cela me convient car moi j'utilise MKVTOOLNIX Aften et FFMPEG.
Hors ligne
#1656 Le 13/02/2013, à 10:12
- om77j
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Merci pour ta réponse Quid
Je veux bien te croire que c'est simple à faire le script et j'avais bien compris que c'était une suite de commande à mettre dans celui-ci.
Cependant je ne sais pas comment faire.
Déjà je pense qu'il faut mieux que j'explique ce que je veux faire.
Dans un 1er temps je voudrais que le script analyse le fichier ou il y a mes films en MKV pour déterminer si celui-ci il y a du DTS.
Après si oui il lance les commandes sur le film en question pour convertir DTS en AC3, si non il ne fais rien.
Si vous voulez bien m'aider je vous mets les commandes pour l'execution:
1- mkvmerge -i /DossierFilms/Film.Origine.mkv (permet d'identifier la piste audio)
2- mkvextract tracks /DossierFilms/Film.Origine.mkv 2:/DossierTempo/Piste.dts (pour extraire la piste)
3-dcadec -o wavall /DossierTempo/Piste.dts | aften -b 640 - /DossierTempo/Piste.ac3 (pour convertir DTS en AC3)
4 - mkvmerge -o /DossierTempo/Film.DTS.AC3.mkv /DossierFilms/Film.Origine.mkv /DossierTempo/Piste.ac3 (pour replacer la piste AC3)
5- mkvmerge -i /DossierTempo/Film.DTS.AC3.mkv (pour vérifier la piste audio)
Merci pour votre aide
Hors ligne
#1657 Le 13/02/2013, à 16:44
- ljere
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
c'est exactement ce que fait le script que je t'ai proposé ci dessus je l'utilise moi même pour ma freebox hd v5
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#1658 Le 13/02/2013, à 17:00
- om77j
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
J'ai regardé pour le script H264tobox et c'est tout a fait ce que je recherché.
Mais cependant je suis un peu déçu car cela devient facile (mais très utile d'ailleurs j'en profite pour remercier les créateurs de ce script)
Car mon idée de départ c'était qu'en créant moi même le script j'aurai appris à en faire.
Je vais quand même essayer c'est comme ça qu'on apprends
En tout cas merci pour ta réponse ljere
Hors ligne
#1659 Le 13/02/2013, à 19:26
- ljere
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
si tu veux apprendre à créer un(des) script(s) je te conseil plutôt ce site http://abs.traduc.org/abs-fr/
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#1660 Le 14/02/2013, à 00:59
- nesthib
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Je te conseille plutôt de lire un tutoriel d'introduction au shell et aux scripts (ex. http://linuxcommand.org). L'ABS est, comme son non l'indique, un recueil avancé et assez exhaustif… un peu déroutant pour le débutant.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#1661 Le 14/02/2013, à 09:10
- Hizoka
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
sinon j'ai cree mkvextractorgui qui fait exactement ce que tu veux
http://forum.ubuntu-fr.org/viewtopic.php?id=293216
le tout en bash... donc il te suffit de regarder le code (un chouille compliqué pour un debutant)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#1662 Le 14/02/2013, à 18:10
- om77j
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Merci pour vos réponses, je vais regarder les différents tuto pour les sripts.
hizoka pour ce qui concerne ton info, j'ai oublié qde dire que j'utilise une debian sur un NAS et que je n'ai pas d'interface graphique.
Par contre comme je suis curieux je vais le tester sous une VM et là j'aurai mon interface graphique.
Je vous tiens au courant de mon avancé et dès que j'ai le script et qu'il fonctionne je le mettrais sur le site pour les gens qui en aurait besoin
Encore merci
Hors ligne
#1663 Le 14/03/2013, à 18:23
- gkeynes
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour
dans l'optique d'apprendre du vocabulaire d'une autre langue.Je voudrais savoir si il est possible,et comment(par un script je suppose),de mettre une liste de mot dans un fichier texte qui comporterait deux colonnes(le mot etranger dans une premiere colonne,et sa traduction dans une deuxieme colonne ou vice versa)et que l'ordinateur reagisse ainsi :
1)l'ordinateur choisit une traduction et fait appel a un fichier audio qui dit ''comment dit on''
2)l'ordinateur lit je ne sais comment la traduction
3)qu'il y ai un moment d'attente pour que je puisse reponde oralement
4)que l'ordinateur lise la reponse
5)que l'ordinateur choisisse un autre mot au hasard dans la liste.
est-il possible de faire cela?
est ce que je peut si c'est le cas avoir aussi la version de l'ordinateur qui dit ''que veut dire'',et que l'ordinateur me pose avant de debuter la lecon,la question ''quel liste de mot voulez vous etre interoger sur?''(je numeroterai chaque traduction dans ce cas la dans une troisieme colonne)...
Cordialement,
guillaume
Ubuntu 14.04.4 pour un travail repetitif il y a Actionnaz,simulateur de clique/mouvement de souris/frappe de texte/ http://linuxfr.org/news/actionaz-un-log … tion-libre
Hors ligne
#1664 Le 15/03/2013, à 17:22
- Haleth
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Je cherche un petit bout de code charmant pour faire le travail suivant: supprimer les doublons sur une ligne.
In:
toto tata toto
Out:
toto tata
L'ordre n'est pas important, le nombre de mot est indeterminé.
Des idées ?
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#1665 Le 15/03/2013, à 21:09
- Hizoka
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Haleth => Voila une idee si tu n'as pas 30 000 lignes (bien que ca marcherait...)...
# Boucle traitant une ligne à la fois
while read
do
# changement des espaces en saut de lignes
liste_mot="${REPLY// /$'\n'}"
# Suppression des doublons
liste_mot=$(sort -u <<< "${liste_mot}")
# Remplacement des sauts de lignes par des espaces
liste_mot="${liste_mot//$'\n'/ }"
# Envoie de la ligne (modifié ou non au final) dans un nouveau fichier
echo "${liste_mot}" >> nouveau_fichier
done < fichier
gkeynes => ce n'est pas un script qu'il te faut la mais quelque chose de plus evolué, cree un topic pour ca.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#1666 Le 23/03/2013, à 17:29
- noyan
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonsoir,
Existe-il une liste de tous ces scripts car j'ai éventuellement un script à proposer mais je veux éviter de faire des doublons.
Noyan
Hors ligne
#1667 Le 23/03/2013, à 18:03
- ljere
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
oui mais elle n'est peut être pas complète scripts_utiles
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#1668 Le 24/03/2013, à 10:26
- Bousky
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Elle est très loin d'être complète…
Pour ceux que ça peut inspirer, voici mon prompt (bash) :
#!/bin/bash
function bsk_prompt {
case "$1" in
1|2|3) ;;
*) return 1 ;;
esac
# définition des couleurs
local usr_root="\[\e[1;31m\]" # utilisateur root (uid = 0)
local usr_sys="\[\e[1;32m\]" # utilisateurs système (uid < 1000)
local usr_std="\[\e[1;33m\]" # utilisateurs standards (uid >= 1000)
local host="\[\e[1;35m\]" # hostname
local pwd="\[\e[1;36m\]" # répertoire
local pwd_clear="\[\e[1;34m\]" # répertoire (meilleure visibilité sur fond clair)
local git="\[\e[1;31m\]" # branche git
local git_info="\[\e[31m\]" # état du dépôt git
local prompt="\[\e[31m\]" # PS2 et fin de PS1 multi-ligne
local null="\[\e[0m\]" # réinitialisation des attributs graphiques
local return="\E[1;31m⏎\e[0m" # retour à la ligne avant le prompt
# messages git
local git_ahead="push"
local git_behind="pull"
local git_commit="commit"
local git_untracked="untracked"
local bw
case "$2" in
clear) pwd="$pwd_clear" ;;
bw) bw="1" ;;
"") ;;
*) return 1 ;;
esac
[ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null || bw=1
if [ "$bw" ] ; then
usr_root=
usr_sys=
usr_std=
host=
pwd=
git=
git_info=
prompt=
null=
return="⏎"
fi
local git_cmd='$(
if git status &>/dev/null ; then
echo -n ">'$git'"$(git branch | sed '\''/^\*/!d;s/^* //'\'')"'$null'"
[ "$(git status -s | grep ^??)" ] && echo -n "-'$git_info$git_untracked$null'"
[ "$(git status -s | grep -v ^??)" ] && echo -n "-'$git_info$git_commit$null'"
git status | grep "^# Your branch is behind" &>/dev/null && echo -n "-'$git_info$git_behind$null'"
git status | grep "^# Your branch is ahead" &>/dev/null && echo -n "-'$git_info$git_ahead$null'"
fi
)'
# retour à la ligne si la dernière commande ne l'a pas fait
PROMPT_COMMAND='echo -en "\E[6n";read -sdR PRMPTCURPOS;[ ${PRMPTCURPOS#*;} -eq 1 ]||echo -e "'$return'";unset PRMPTCURPOS'
# rectangle de couleur en fonction de la valeur d'erreur de la dernière commande
if [ "$bw" ] ; then
PS1=
else
PS1='\[\e[0;$(
case $? in
0 |130|147|148) echo "42" ;;
137|143 ) echo "44" ;;
* )
if [ $? -ge 126 ] ; then
echo "41"
else
echo "43"
fi
esac
)m\] \[\e[0m\] '
fi
# ligne du dossier pour un prompt à trois lignes
case "$1" in
1|2) ;;
3) PS1="${PS1}${pwd}\w${null}${git_cmd}:\n${prompt}|${null} " ;;
esac
# choix de la couleur de l'utilisateur
if [ `id -u` -eq 0 ] ; then
PS1="${PS1}${usr_root}"
elif [ `id -u` -ge 1000 ] ; then
PS1="${PS1}${usr_sys}"
else
PS1="${PS1}${usr_std}"
fi
# user@host
PS1="${PS1}\u${null}@${host}\h${null}"
# dossier pour un prompt à une ou deux lignes
case "$1" in
1|2) PS1="${PS1}:${pwd}\w${null}${git_cmd}\$" ;;
3) PS1="${PS1}\$";;
esac
case "$1" in
1) PS1="${PS1} " ;;
2|3) PS1="${PS1}\n${prompt}|${null} " ;;
esac
# PS2
case "$1" in
1) PS2="${prompt}>${null} " ;;
2|3) PS2="${prompt}|${null} " ;;
esac
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" ;;
*)
esac
}
À appeler sous cette forme :
source <fichier>
bsk_prompt <nb_de_lignes> [<couleurs>]
<nb_de_lignes> = 1, 2 ou 3
<couleurs> = rien, "clear" (les couleurs sont plus visibles sur fond clair) ou "bw" (noir et blanc).
« bsk_prompt 1 bw » donne le prompt classique.
Retour à la ligne même si la commande précédente n'en a pas mis un à la fin
Rectangle de couleur en ponction de la valeur de retour de la commande précédente :
vert : tout c'est bien passé
bleu : processus tué (kill, killall, …)
orange : le processus c'est terminé avec une erreur (grep n'a rien trouvé, …)
rouge : erreur système (erreur de segmentation, commande non trouvée,…)
username en couleur :
vert : utilisateur normal
rouge : root
orange : autre utilisateur système
Quand on est dans un dépôt git, affichage de la branche et de l'état (commit, push ou pull à faire, fichier non suivi)
Dernière modification par Bousky (Le 24/03/2013, à 10:30)
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
#1669 Le 24/03/2013, à 12:02
- pingouinux
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
@Haleth #1665
@Hizoka #1666
Réponse tardive, mais le script peut être un peu simplifié, sans changer le principe :
while read
do
echo $(sed -r 's/\s+/\n/g' <<<"$REPLY"|sort -u)
done <fichier >nouveau_fichier
Hors ligne
#1670 Le 24/03/2013, à 12:10
- Hizoka
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
j'aime bien utiliser le plus de full bash
mais je ne pense jamais à ca :
done <fichier >nouveau_fichier
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#1671 Le 24/03/2013, à 13:22
- Haleth
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Ok, donc pas d'autres idées .. :'(
Actuellement, j'utilise tr pour changer les espaces en \n, puis uniq -c, puis de nouveau tr.
J'ai trouvé une solution pour faire plus simple: tr, puis awk en deux mots.
Force est de constater qu'il n'y a pas de méthode élégante
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#1672 Le 24/03/2013, à 13:43
- pingouinux
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
j'utilise tr pour changer les espaces en \n, puis uniq -c, puis de nouveau tr
Attention, uniq ne s'applique qu'à des lignes déjà triées.
Voici un extrait de man uniq
Note: 'uniq' does not detect repeated lines unless they are adjacent.
You may want to sort the input first, or use `sort -u' without `uniq'.
Hors ligne
#1673 Le 24/03/2013, à 13:44
- Haleth
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Autant pour moi, c'est sort -u que j'utilise
Mes doigts ont fouchés
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#1674 Le 29/03/2013, à 04:49
- nassertom
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour,
Je n'ai pas eu le courage de regarder toutes les pages alors désolé si c'est un doublon.
voici le script que j'utiliser pour faire le ménage sur mon NAS
#!/bin/bash
if [ $# != 1 ] # Test le nombres de paramètre passé au shell
then
echo Tapez oui si vous voulez lancer le clean;
exit 0 # Quitte le shell
elif [ "$1" != "oui" ] # Test si l'utilisateur a tapé oui
then
echo il faut taper oui en minuscule;
exit 0
fi
#Paramètres du shell
UserValue="._* *.DS_Store Thumbs.db desktop.ini"
for i in $UserValue
do
echo "Suppression des fichiers : $i"
find ./ -name "$i" -delete
done
echo Le traitement est terminé;
Cordialement,
Thomas R
C'est la plus radicale manière d'anéantir tout discours que d'isoler chaque chose de tout le reste; car c'est par la mutuelle combinaison des formes que le discours nous est né.
[ Le Sophiste, 259e ]
Hors ligne
#1675 Le 29/03/2013, à 05:12
- nassertom
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
re bonjour,
voici les scripts que j'utilise pour faire la conversion à la volé de vidéo.
je sais que ce type de script est en abondance sur le réseau cependant je n'ai jamais trouvé mon bonheur.
en quelques mots :
- traitement en masse
- répertoire source vers cible
- choix de l'extension source
- selection du français pour les sources avec plusieurs pistes audio
- choix du nombre de conversion à faire en simultané
- vérification de la présence des fichiers avant la conversion (en cas de traitement en plusieurs lot...)
- création de plusieurs fichiers de log (fichier erreur, réussi, log... => le but pour moi est de faire un tail -f sur le log de mon choix durant l'execution)
le fonctionnement est le suivant : un script est appelé avec comme paramètre le nombre de thread (je sais que ce n'est pas un vrai thread...) l'extension cherché, le répertoire source puis la cible
ce script va appelé un autre script (l'évolution aurait été de s'appelé soit même en récursif!! je suis trop fainéant pour le faire en ce moment lol)
si le fichier à convertir existe déjà en avi dans l'arborescence cible alors la conversion n'est pas faite (et la log des fichiers déjà présent est valorisé)
place au code :
le script à appeler
#!/bin/bash
if [ $# != 4 ] # Test le nombres de paramètre passé au shell
then
echo erreur dans la saisie des paramètres;
echo "essayer : sh $0 nbTread /repertoire_source /repertoire_cible extension";
exit 0 # Quitte le shell
elif [ ! -d "$2" -o ! -d "$3" ] # Test que les paramètres soient bien des repertoires
then
echo il faut renseigner des répertoirs dans les paramètres;
exit 0
fi
#Paramètres du shell
repertoirSource="${2%/}/" # Supprime le slash de la fin si il existe puis en ajoute un (pour éviter d'en avoir 2 si l'utilisateur l'avait mis)
repertoirCible="${3%/}/"
extension="${4}"
UserValueThread=$1
# start threads
for i in $(seq 1 $UserValueThread)
do
echo "started instance no: $i"
./filesToAvi.sh $repertoirSource $repertoirCible $extension true &
sleep 2
done
le second script qui se nomme filesToAvi.sh
#!/bin/bash
if [ $# != 4 ] # Test le nombres de paramètre passé au shell
then
echo erreur dans la saisie des paramètres;
echo "essayer : sh $0 /repertoire_source /repertoire_cible extension true/false";
echo "true veut dire création de l'arboréssence de la source vers la cible";
exit 0 # Quitte le shell
elif [ ! -d "$1" -o ! -d "$2" ] # Test que les paramètres soient bien des repertoires
then
echo il faut renseigner des répertoirs dans les paramètres;
exit 0
fi
#Paramètres du shell
repertoirSource="${1%/}/" # Supprime le slash de la fin si il existe puis en ajoute un (pour éviter d'en avoir 2 si l'utilisateur l'avait mis)
repertoirCible="${2%/}/"
extension="${3}"
creatFolder="${4}"
cible="${repertoirCible}"
#Fichiers de log pour exploitation future
log="$repertoirCible"log.txt
existant="$repertoirCible"existant.txt
absent="$repertoirCible"absent.txt
erreur="$repertoirCible"erreur.txt
flag="non" #Drapeau pour communiquer entre les fonctions
maintenant=$(date) #Pour afficher l'heure et la date dans le fichier de log
#Fonction pour mettre à jour le repertoire à créer
actualiseRepertoireCible(){
if [ $creatFolder = "true" ] # si je dois reproduire l'arboressence
cible=$(echo "${1}"|sed "s#${repertoirSource}#${repertoirCible}#g") # remplace le repertoire source par la cible
cible="${cible%/}/"
then
if [ ! -d "${cible}" ] # Test si le repertoire existe
then
# si il n'existe pas alors je le cré
mkdir -p "${cible}"
fi
fi
}
#Fonction pour mettre à jour la date et heure dans la variable.
actualiseTimeOfTreatment() {
maintenant=$(date '+%Y-%m-%d %H:%M:%S')
}
#Fonction métier besoin de ripper des fichiers mkv en avi avec une selection automatique de la langue francaise si présente
actionMKVtoAVI() {
fichier="${1##*/}" #Récupération du nom de fichier passé en paramètre (idem que d'utiliser basename)
echo "${maintenant};${1};demande de conversion." >> "$log";
# recherche le mapping des pistes audio FR via la commande ffmpeg -i
# redirection de la sortie 2 vers la 1 car ffmpeg n'affiche pas les informations à l'écran via la sortie standard.
# recuperation du resultat de grep dans la variable.
audio=`/var/subsonic/transcode/ffmpeg -i "$1" 2>&1| grep '(fre): Audi'`
# supprime de la variable 'Stream #' ainsi que tous ce qui le precede.
audio="${audio##*Stream #}"
# supprime de la variable '(fre)' et tous ce qui suit
audio=${audio%(fre)*}
# la variable contien à ce moment là soit le mappage attendu pour le francais (ex: '0.1') soit rien
# même principe pour le mappage de la vidéo car pour mapper en manuel dans ffmpeg il faut lui donner l'ensemble des flux.
# recherche le mapping de la video via la commande ffmpeg -i
video=`/var/subsonic/transcode/ffmpeg -i "$1" 2>&1| grep ': Video'`
video="${video##*Stream #}"
video=${video%%(*}
# si piste audio FR détecté alors force le map dans la conversion.
# pas de test sur la variable vidéo car en cas d'erreur c'est ffmpeg qui prendra en charge de mapper automatiquement la première piste vidéo.
if ["${audio}" -e ""]
then
echo "${maintenant};${1};Pas de piste audio française trouvée." >> "$log";
echo "${maintenant};${1};ffmpeg -i $1 -async 1 -s 720x576 -r 24 -ab 128k -b 1200k -aspect 16:9 -ac 2 -v 0 -f avi ${cible}${fichier%.*}.avi" >> "$log";
/var/subsonic/transcode/ffmpeg -i "$1" -async 1 -s 720x576 -r 24 -ab 128k -b 1200k -aspect 16:9 -ac 2 -v 0 -f avi "${cible}${fichier%.*}".avi;
else
echo "${maintenant};${1};Piste audio française trouvée." >> "$log";
echo "${maintenant};${1};ffmpeg -i $1 -async 1 -s 720x576 -r 24 -ab 128k -b 1200k -aspect 16:9 -map ${video} -map ${audio} -ac 2 -v 0 -f avi ${cible}${fichier%.*}.avi;" >> "$log";
/var/subsonic/transcode/ffmpeg -i "$1" -async 1 -s 720x576 -r 24 -ab 128k -b 1200k -aspect 16:9 -map "${video}" -map "${audio}" -ac 2 -v 0 -f avi "${cible}${fichier%.*}".avi;
fi
}
actionScript() {
actualiseTimeOfTreatment #demande de mise à jour de la variable temps (maintenant)
if [ "$flag" = "non" ] #Si fichier non trouvé
then
echo "$1" >> "$absent";
actionMKVtoAVI "$1"
else #Si fichier trouvé
echo "${maintenant};${1};${flag}" >> "$log" ;
echo "$1" >> "$existant";
fi
return
}
rechercheCible() { #Dans le cas des boucles for le résultat d'un repertoir n'est pas fini par un '/' c'est pourquoi je l'ajoute apres ${u}"/"
for u in "$1"* ;do #Boucle sur tout le contenu du repertoir passé en paramètre
if [ -d "$u" ] #Si repertoire
then
if [ -f "${u}"/"$2" ] #si le fichier existe dans le répertoire
then
flag="${u}"/"$2" #valorise le flag pour dire que le fichier est présent
return #quitte la fonction
else
rechercheCible "${u}/" "$2" #sinon explore le contenu de ce nouveau répértoire
fi
fi
done
return #Si je sorts ici alors c'est que je n'ai rien trouvé...
}
rechercheSource() {
for i in "$1"* ;do #Boucle sur l'ensemble des fichiers
flag="non" #Passe le drapeau à non avant de faire la recherche dans le repertoire cible
if [ -d "$i" ] #Si repetoire
then
rechercheSource "${i}/" #Recherche dans le sous répertoire
else
currentExtension="${i##*.}" #Extraction de l'extension
nom="${i##*/}" #extraction du nom de fichier
if [ "$currentExtension" = "${extension}" ]
then
if [ -f "${repertoirCible}${nom%.*}".avi ] #si le fichier existe dans le répertoire cible
then
flag="${repertoirCible}${nom%.*}".avi #valorise le flag pour dire que le fichier est présent
actionScript "$i" #Demande l'execution d'une action
else
rechercheCible "$repertoirCible" "${nom%.*}".avi #recherche sa présence dans les sous répértoires Cible (apres avoir changé son extension)
if [ "$flag" = "non" ] #Si fichier non trouvé
then
actualiseRepertoireCible "$1" #Afin de créer le repertoire cible.
fi
actionScript "$i" #Demande l'execution d'une action
fi
else
echo "${maintenant};${1};n'est pas un fichier $extension">> "$log";
echo "$i" >> "$erreur";
fi
fi
done
return
}
rechercheSource "$repertoirSource"
echo "Job's done by Tom";
dans ce dernier code j'ai précisé l'adresse de mon ffmpeg car j'execute ce code sur un serveur d'application qui utilise son propre ffmpeg il vous faudra la modifier.
changer
/var/subsonic/transcode/ffmpeg
par
ffmpeg
Cordialement,
Thomas R
Dernière modification par nassertom (Le 29/03/2013, à 05:19)
C'est la plus radicale manière d'anéantir tout discours que d'isoler chaque chose de tout le reste; car c'est par la mutuelle combinaison des formes que le discours nous est né.
[ Le Sophiste, 259e ]
Hors ligne