Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1651 Le 31/01/2013, à 17:30

Bousky

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

gusano a écrit :

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, à 17: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, à 18: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, à 19: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, à 19:57

Qid

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

om77j a écrit :

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, à 10: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, à 11: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, à 17: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, à 18: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, à 20: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, à 01: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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#1661 Le 14/02/2013, à 10:10

Hizoka

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

sinon j'ai cree mkvextractorgui qui fait exactement ce que tu veux tongue

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, à 19: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, à 19: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, à 18: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, à 22: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, à 18: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, à 19: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, à 11: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, à 11: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, à 13: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, à 13:10

Hizoka

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

j'aime bien utiliser le plus de full bash tongue

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, à 14: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 sad


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, à 14:43

pingouinux

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

@Haleth   #1672 a écrit :

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, à 14: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 lol


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, à 05: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, à 06: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, à 06: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