[shell] Tri de fichiers avec extensions

Fermé
fozzy - 20 oct. 2006 à 11:20
 Flow - 5 août 2007 à 10:33
Bonjour à tous !

J'ai besoin d'écrire un script shell permettant de trier des fichiers suivant leur extension et de les déplacer dans un dossier créé par mes soins.
Le dossier rep_text est censé contenir à la fin de l'éxécution du bash tous les fichiers .txt du répertoire d'où a été lancé le script.

Je vous met mon travail car le script me déplace tout le dossier script (d'où est lancé le script) au lieu des fichiers en eux-même.

Si quelqu'un aurait l'obligence de m'expliquer pourquoi mon script ne fait pas ce que je demande, merci d'avance.

Le script est exécuté à partir du dossier : /home/bandit/Script/

Script :

#!/bin/sh
if [ ! -d /home/bandit/test_script ]
then
mkdir /home/bandit/test_script
mkdir /home/bandit/test_script/rep_text
mkdir /home/bandit/test_script/rep_mp3
mkdir /home/bandit/test_script/rep_tmp
fi

txt= find *.txt
mp3= find *.mp3
tmp= find *.tmp

val="/home/bandit/Script/"

echo "$txt"
echo "$mp3"
echo "$tmp"
cd ..

mv "/home/bandit/Script/$txt" /home/bandit/test_script/rep_text/
#mv $val$mp3 $val
#mv /home/bandit/Script/$tmp /home/bandit/test_script/rep_tmp
A voir également:

4 réponses

teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
20 oct. 2006 à 11:26
Salut,
Question sans doute très con :)

Pourquoi tu ne fais pas :

mv /home/bandit/Script/*.txt /home/bandit/test_script/rep_text/


?

J'avais prévenu :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
20 oct. 2006 à 11:43
Salut,

teebo => C'est pas con, c'est la logique même ;-))

fozzy => Tes variables, déjà faut les encadrer avec des guillemets puisqu'elles contiennent des espaces (txt="find *.txt"), ensuite puisqu'elles contiennent une commande, il vaut mieux les écrire comme suit :
txt="$(find *.txt)"
;-))
0
Bah tout simplement parce que je n'y ai pas pensé oh la honte MDR !

Maintenant tout fonctionne évidemment 8-)

Bon je sors MDR

Merci Thibault ta question m'a ouvert les yeux 8-)

#!/bin/sh
if [ ! -d /home/bandit/test_script ]
then
mkdir /home/bandit/test_script
mkdir /home/bandit/test_script/rep_text
mkdir /home/bandit/test_script/rep_mp3
mkdir /home/bandit/test_script/rep_tmp
fi

mv /home/bandit/Script/*.txt /home/bandit/test_script/rep_text/
mv /home/bandit/Script/*.mp3 //home/bandit/test_script/rep_mp3
mv /home/bandit/Script/*.tmp /home/bandit/test_script/rep_tmp
0
Salut!
Ton shell script ma bien aidé, j'avais essayer de faire au moins aussi compliquer que toi ^^
Maintenant j'ai une question, par exemple j'ai motion (capture webcam) qui crée des photos avec la date dedans mais il n'y a pas que la date et j'aimerais savoir si il est possible de par exemple lire qu'a partir du deuxieme caractere pour x caracteres je pense que c'est possible mais je n'ai aucune idée!et donc en fait je ferais le tri des dossiers par date merci!
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > Flow
5 août 2007 à 09:37
Salut,

Regarde du côté de la commande sort (man sort) et de la syntaxe du genre :
sort -t FS +CHAMP -k POS
ou FS est le caractère séparateur de champs, CHAMP (un numéro) le champ à prendre en compte pour le tri et POS (un numéro aussi) le nième caractère à prendre à compte...

;-))
0
Flow > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
5 août 2007 à 10:01
euh c'est un peu confus pour moi l'histoire du champ??
en fait les fichiers sortis sont de se style:
09-20070804114231.avi ou .jpg
donc en fait ce qui m'interesse ici c'est la date 20070804 j'aimerais l'isoler dans une variable pour faire la recherche par jour et dans le dossier de nom 04/08/2007 refaire la meme chose pour les photos pour chaques heures merci :)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
5 août 2007 à 10:11
Salut,

voici quelques commandes qui peut être pourront t'aider
lami20j@deb:~/trash$ ls -1 *.avi
09-20070804114231.avi
09-20070805114231.avi
09-20070806114231.avi
09-20070807114231.avi
09-20070812114231.avi
09-20070816114231.avi
lami20j@deb:~/trash$ ls -1 *.avi | sort --key=4,8
09-20070804114231.avi
09-20070805114231.avi
09-20070806114231.avi
09-20070807114231.avi
09-20070812114231.avi
09-20070816114231.avi
lami20j@deb:~/trash$ ls -1 *.avi | grep -Eo '[0-9]{8}'
20070804
20070805
20070806
20070807
20070812
20070816
0
Merci beaucoup l'ami c'est justement ce que je voulais :)
Bonne journée ;)
0