Lister tout le contenu d'un disque dur dans une table mysql
xunil2003
Messages postés
765
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai un disque dur médiathèque où je mets toutes mes vidéos de mes DVD, photos et manuels.
Je voudrais pouvoir insérer automatiquement dans une table mysql depuis un script bash, tous les noms de fichiers avec le chemin d'accès complet au fichier, listé sur mon disque dur.
Pour cela j'avais pensé faire ceci, mais ça marche pas vraiment.
Comment dois-je m'y prendre d'après vous ?
Merci.
J'ai un disque dur médiathèque où je mets toutes mes vidéos de mes DVD, photos et manuels.
Je voudrais pouvoir insérer automatiquement dans une table mysql depuis un script bash, tous les noms de fichiers avec le chemin d'accès complet au fichier, listé sur mon disque dur.
Pour cela j'avais pensé faire ceci, mais ça marche pas vraiment.
cd /mnt/mediatheque/
for i in 'tree'
do
echo "$i"
echo "$i" >> $HOME/Documents/mediatheque.txt
done
cd ~
exit 0
Comment dois-je m'y prendre d'après vous ?
Merci.
A voir également:
- Lister tout le contenu d'un disque dur dans une table mysql
- Cloner disque dur - Guide
- Defragmenter disque dur - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Chkdsk disque dur externe - Guide
- Table ascii - Guide
3 réponses
Il faut que ton script shell construise une chaîne avec la bonne requête SQL. Ça devrait ressembler à quelque chose dans ce genre :
Ici je suppose que la colonne qui stocke le nom du fichier s'appelle "ma_colonne" et que la table "ma_table" a une seule colonne ou un index auto incrémenté. Adapte la requête SQL en fonction de la structure de ta table.
Tu notes que ni le login, ni l'host, ni le mot de passe n'apparaissent en clair dans le script. On fait cela pour éviter que des informations sensibles n'apparaissent en clair dans ce script, mais du coup il faut que ces informations soient définies dans le fichier
http://dev.mysql.com/doc/refman/5.0/fr/option-files.html
Note : pour voir certaines des possibilités offertes par ce fichier, tu peux aussi t'inspirer du contenu de
Puis attribue à ce fichier des droits restreints :
Bonne chance
#!/bin/bash table="ma_table" database="ma_base" mysql="mysql -D $database -e" folder="$HOME/Documents" for filename in $(find $folder -type f) do $mysql "'INSERT INTO $table (ma_colonne) VALUES ($filename)'" done exit 0
Ici je suppose que la colonne qui stocke le nom du fichier s'appelle "ma_colonne" et que la table "ma_table" a une seule colonne ou un index auto incrémenté. Adapte la requête SQL en fonction de la structure de ta table.
Tu notes que ni le login, ni l'host, ni le mot de passe n'apparaissent en clair dans le script. On fait cela pour éviter que des informations sensibles n'apparaissent en clair dans ce script, mais du coup il faut que ces informations soient définies dans le fichier
~/.my.cnf:
http://dev.mysql.com/doc/refman/5.0/fr/option-files.html
[client]
# Le mot de passe suivant sera envoyé par tous les clients standards MySQL
user = root
password = "my_password"
host = localhost
Note : pour voir certaines des possibilités offertes par ce fichier, tu peux aussi t'inspirer du contenu de
/etc/mysql/debian.cnf.
Puis attribue à ce fichier des droits restreints :
sudo chmod 700 ~/.my.cnf
Bonne chance
Bonjour
Oui il y avait bien un problème avec les noms des fichiers qui contiennent un ou des espaces.
J'ai fait un essai dans un fichier texte pour l'instant, ça marche impeccable
Merci.
Oui il y avait bien un problème avec les noms des fichiers qui contiennent un ou des espaces.
J'ai fait un essai dans un fichier texte pour l'instant, ça marche impeccable
startDir="/mnt/mediatheque"
echo "" > $HOME/Documents/mediatheque.txt
find "$startDir" -type f -print0 | while IFS="" read -d '' f; do echo "$f" >> $HOME/Documents/mediatheque.txt; done
Merci.
la boucle pourrait s'avérer nocive si le nom d'un fichier contient un espace, ou autre caractère non imprimable.
en effet, la boucle va exécuter les commandes sur chaque mot que la substitution de commande va produire.
ou
mais je ne peux pas tester :(
ou