Script tri de fichiers

Ola todos,

je souhaite réaliser un script bash qui se lancerait via une action personnalisée de thunar pour trouver tout les fichiers vidéos présents dans le repertoire de travail et ses sous-répertoires et les déplacer dans un autre.

Ensuite une fois que ça marche, je voudrais ajouter une fenètre de dialogue (zenity?) qui demanderait confirmation en montrant la liste des fichiers à déplacer.

Dans un premier temps, j’avais fait le script qui marche mais vraiment très moche :

#!/bin/bash find -name "*.mpg" -exec mv {} /home/USER/Vidéos/"Vidéos à trier"/ \; find -name "*.mts" -exec mv {} /home/USER/Vidéos/"Vidéos à trier"/ \; find -name "*.mov" -exec mv {} /home/USER/Vidéos/"Vidéos à trier"/ \; find -name "*.avi" -exec mv {} /home/USER/Vidéos/"Vidéos à trier"/ \; find -name "*.MPG" -exec mv {} /home/USER/Vidéos/"Vidéos à trier"/ \; find -name "*.MTS" -exec mv {} /home/USER/Vidéos/"Vidéos à trier"/ \; find -name "*.MOV" -exec mv {} /home/USER/Vidéos/"Vidéos à trier"/ \; find -name "*.AVI" -exec mv {} /home/USER/Vidéos/"Vidéos à trier"/ \; exit

Je cherche a faire quelque chose d’un peu plus élégant et j’ai tenté ceci mais ça ne fonctionne pas :

[code]#!/bin/bash

Définition des variables :

videos=’/home/USER/Vidéos/“Vidéos à trier”/’

#Deplacer les fichiers videos
find -regextype posix-extended -regex ‘.*.(mpg|mts|mov|avi|MPG|MTS|MOV|AVI)$’ -exec mv {} $videos ;
exit[/code]

Je précise que via thunar j’ai choisi l’option %f lors du lancement du script et avec le premier que j’ai fait ça marche impecc.

Si vous avez des conseils…

Merci

PS :Je précise (est ce vraiment utile ?) que je suis un archi débutant en scripting et que j’ai surtout envie de faire ce script dans une optique d’apprentissage (j’ai lu le tuto sur le site du zéro mais j’ai vraiment besoin de faire pour apprendre…).

moi j’ utiliserai un fichier temporaire pour pouvoir bien séparer mon programme entre les trois “parties”
-recherche
-demande de confirmation
-traitement

[code]#!/bin/bash

Définition des variables :

DEST="/home/gg/tmp2"
FICHIER_TMP=“fichier_tmp”

effacement du fichier temporaire s’il éxiste encore

rm -f “$FICHIER_TMP”

recherche de tout tes fichiers correspondant a ton expression

find -regextype posix-extended -regex ‘.*.(mpg|mts|mov|avi|MPG|MTS|MOV|AVI)$’ > $“FICHIER_TMP”

demande de confirmation

zenity --list --title “resultats de la recherche” --column “Fichier” --text “Voulez vous déplacer ces fichiers?” < “$FICHIER_TMP” || rm -f “$FICHIER_TMP” && exit

traitement dans une boucle while

while read ligne
do
echo -e mv “$ligne” "$DEST"
mv “$ligne” "$DEST"
done < “$FICHIER_TMP”

supprimer le fichier après usage

rm -f “$FICHIER_TMP”

exit
[/code]
normalement ça devrai marcher, mais je n’ai pas testé dans thunar…

ou avec for in

var='avi mpeg flv'

for i in $var
do
 echo "$i."
 #ici ce que tu veux faire
done

@G > Pas la peine de passer par un fichier :

[code]#!/bin/bash

shopt -s globstar # on utilise les globbings étendu
shopt -s nocaseglob # les globbings sont insensibles à la casse

Définition des variables :

DEST="/home/gg/tmp2"
titre="resultats de la recherche"
question=“Voulez vous déplacer ces fichiers ?”

recherche de tout tes fichiers correspondant a ton expression

videos=( **/*.{mpg,mts,mov,avi} )

demande de confirmation

printf “%s\n” “${videos}” | zenity --list --title “${titre}” --column “Fichier” --text “${question}”

[[ $? -ne 0 ]] && exit

pas sûr d’avoir compris l’intérêt de cette partie

mv -v “${videos[@]}” “${DEST}”

#si c’était un exemple évidement il vaut mieux
for video in “${videos}” ; do
# pleins de trucs sur ${video}
done[/code]

Pour l’exemple si on ne voulais pas demander de validation par zenity :

[code]#!/bin/bash

shopt -s globstar # on utilise les globbings étendu
shopt -s nocaseglob # les globbings sont insensibles à la casse

Définition des variables :

DEST="/home/gg/tmp2"

mv -v **/*.{mpg,mts,mov,avi} “${DEST}”[/code]

La solution vraiment insensible à la casse va matcher les fichiers *.mTs par exemple ce qui n’est pas le cas des versions que vous donnez.