[shell] Tri de fichiers avec extensions
fozzy
-
Flow -
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
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:
- [shell] Tri de fichiers avec extensions
- Classic shell - Télécharger - Personnalisation
- Comment faire un tri personnalisé sur excel - Guide
- Logiciel tri photo - Guide
- Renommer des fichiers en masse - Guide
- Explorateur de fichiers - Guide
4 réponses
Salut,
Question sans doute très con :)
Pourquoi tu ne fais pas :
?
J'avais prévenu :)
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 :)
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 :
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)";-))
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
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
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!
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!
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 :)
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 :)
Salut,
voici quelques commandes qui peut être pourront t'aider
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