Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2011, 18h59   #1
Invité de passage
 
Inscription : août 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 9
Points : 1
Points : 1
Par défaut [Bash] Problème avec locate dans un script

Bonjour à tous,

Je ne sais pas si c'est vraiment le bon forum où poster ça, si je me suis trompé merci au modo qui déplacera ce topic.

Voilà, ça fait très longtemps que j'ai pas touché à un script Bash, là j'en ai besoin et forcément ça coince.

Voici la situation:
J'ai beaucoup de fichiers en vrac dans un dossier qui n'a pas de sous-dossiers.
Sur une partition, j'ai des fichiers qui portent les mêmes noms que ceux en vrac, mais une autre extension, et ceux là sont bien rangés.

Le but est de recréer l'arborescence, à partir d'un certain dossier, des fichiers bien rangés, et d'y copier les fichiers en vrac

Pour ça j'utilise le locate dans mon script, mais il ne retourne rien du tout !! Le voici :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/bash
#MàJ pour le locate
updatedb
 
# Dossier où ya les fichiers en vrac
DossierSource="/media/Musiques/test/"
# Dossier où on va mettre les copies bien rangées
DossierDestination="/media/Musiques/Musiques/"
# Dossier qui contient les fichiers bien rangés
DossierSrch="/media/Musiques/"
 
# pour les espaces dans les noms des fichiers
IFS=$'\'
 
# parcours des fichiers en vrac
Fichiers="$(ls ${DossierSource})"
 
for File in ${Fichiers}; do
	if [ "${File}" != "." ] && [ "${File}" != ".." ] ; then
		# test
		echo $File 
#jusque là pas de soucis, chaque fichier est bien écrit
		FilesFound="$(locate "${File}")"
		# test
		echo $FilesFound
# là ya rien du tout qui s'affiche !!!!!! du coup la suite n'est pas exécutée
		for FF in ${FilesFound}; do
			BasePath="$(dirname ${FF})"
			if [ $BasePath != "${DossierSource}" ] && [ $BasePath != "${DossierDestination}" ] ; then
# pour la ligne du dessous c'est pas propre, je sais pas comment faire autrement pour
# enlever du chemin trouvé le DossierSrch
				NewBP=$BasePath | cut -c${#DossierSrch}-1000000
				target="$DossierDestination$NewBP/"
				source="$DossierSource/$File"
				if [ ! -d 'dirname $target' ] ; then
				    mkdir -m 755 -p $(dirname $target)
				fi
				cp -Rfp $source $target
			fi
		done
	fi
done
 
exit 0

Voilà bien évidemment je suis même pas sûr que la synthaxe est bonne.
Ca fait des plombes que je suis sur ce petit script, et ça commence à bien me prendre la tête...

Merci de me venir en aide !
kopros2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 22h51   #2
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 551
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 551
Points : 4 271
Points : 4 271
Salut,

peux-tu simplement faire un locate d'un des fichiers en ligne de commande et voir si ça te retourne un résultat?

Si ça ne va toujours pas, générer la db pour locate en tant que root à l'aide de la commande suivante et refaire le test :

Code :
1
2
 
# updatedb && locate <un_des_fichiers>
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 07h06   #3
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

Il y a des outils, comme ça, que je n'utilise pas dans un script : locate, par exemple.
Et d'autres, dont je considère que l'usage doit être proscrit : ls.
Par contre, find c'est bien, et précis; mais il ne faut pas mettre le résultat dans une variable (attention aux espaces, ou pire, dans les noms). C'est mieux de brancher la sortie (pipe |) sur une commande qui parsera le résultat.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h59.


 
 
 
 
Partenaires

Hébergement Web