[shell] Tri de fichiers avec extensions

fozzy -  
 Flow -
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 33570 Statut Modérateur 1 793
 
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 41342 Statut Modérateur 4 896
 
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
fozzy
 
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
Flow
 
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 41342 Statut Modérateur 4 896 > Flow
 
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 41342 Statut Modérateur
 
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 21644 Statut Modérateur, Contributeur sécurité 3 570
 
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
Flow
 
Merci beaucoup l'ami c'est justement ce que je voulais :)
Bonne journée ;)
0