2010-07-12 5 views
0

Description du problème:boucle sur un répertoire et faire une analyse à l'aide du script shell

j'ai un répertoire avec un ensemble de fichiers et ces noms de fichiers enregistrés dans le tableau dans la base de données appelée « File_names » je veux faire shell script qui boucle sur le répertoire et à chaque fois la recherche si ce nom de fichier existe dans la base de données ou non, alors si non: insérez ce nom dans la base de données. D'autre ne fait rien.

Mon parcours:

FILES=/path/* 
for f in $FILES 
do 
echo $f 
done 

Mais $ f ici contient le chemin + nom je veux être le nom que faire smthing comme:

count = " select count(*) from File_names where name = $f" 

Comment puis-je faire cela?

Merci à l'avance

+0

Et la base de données est Oracle, serveur SQL ...? –

Répondre

2

Je ne trouve pas votre question très claire; Je vais répondre à la partie shell de ce que je comprends. Si je comprends bien, vous voulez exécuter une commande sur chaque fichier dans un répertoire. Mais vous êtes uniquement intéressé par le nom de base du fichier, c'est-à-dire sans la partie de répertoire.

  • Alternative 1

    for f in /path/*; do 
        echo "$(basename "$f")" 
    done 
    
  • Alternative 2

    set -e 
    cd /path 
    for f in *; do 
        echo "$f" 
    done 
    

    set -e alors que le script arrête si la commande cd échoue. C'est généralement une bonne idée de lancer des scripts shell avec set -e.

Attention à la citation, dans le cas où les noms de fichier contiennent des caractères de ponctuation ou d'espacement. Cela s'applique à la fois à la partie shell et à la partie SQL: la manière dont vous construisez la requête dans votre question est complètement ouverte à SQL injection (pensez à ce qui se passerait si quelqu'un créait un fichier appelé foo; DROP TABLE File_names).

Questions connexes