# Script tri de fichiers

**URL:** <https://www.debian-fr.org/t/script-tri-de-fichiers/54338>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 12:57 UTC](https://www.debian-fr.org/t/script-tri-de-fichiers/54338 "2016-02-21T12:57:45Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Xylo\_b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/x/f1d935/32.png) [@Xylo\_b](https://www.debian-fr.org/u/Xylo_b)\
**Post date:** [Février 21, 2016, 12:57 UTC](https://www.debian-fr.org/t/script-tri-de-fichiers/54338/1 "2016-02-21T12:57:45Z")

</div>

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…).

---

<div class="post-metadata">

**Author:** ![\_G1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/dc4da7/32.png) [@\_G1](https://www.debian-fr.org/u/_G1)\
**Post date:** [Février 21, 2016, 1:17 UTC](https://www.debian-fr.org/t/script-tri-de-fichiers/54338/2 "2016-02-21T13:17:07Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![vohu](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vohu/32/4108_2.png) [@vohu](https://www.debian-fr.org/u/vohu)\
**Post date:** [Février 21, 2016, 1:17 UTC](https://www.debian-fr.org/t/script-tri-de-fichiers/54338/3 "2016-02-21T13:17:07Z")

</div>

ou avec for in

```auto
var='avi mpeg flv'

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

```

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 1:17 UTC](https://www.debian-fr.org/t/script-tri-de-fichiers/54338/4 "2016-02-21T13:17:08Z")

</div>

@ **_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.
