2010-07-12 57 views
0

问题描述做了一些分析:环路上的目录,并通过使用shell脚本

我有一组文件,并将这些文件名保存在表到数据库称为“File_names” 我想打壳目录脚本循环在目录中,每次搜索数据库中是否存在该文件名,则如果不存在:则将该名称插入数据库中。否则什么都不做。

我的踪迹:

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

但是$ F这里包含了我希望的名字仅做smthing像路径+名称:

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

我怎样才能做到这一点?

在此先感谢

+0

而数据库是Oracle,SQL服务器......? – 2010-07-12 13:59:44

回答

2

我没有发现你的问题非常清楚;据我了解,我会回答它的外壳部分。

据我所知,你想在目录中的每个文件上运行一个命令。但是您只对文件的基本名称感兴趣,即没有目录部分。

  • 备选1

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

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

    set -e是这样,如果cd命令失败脚本将停止。通过set -e启动shell脚本通常是一个好主意。

如果文件名包含标点符号或间距,请小心引用。这适用于shell部分和SQL部分:您在问题中构建查询的方式完全开放于SQL injection(想想如果有人创建了名为foo; DROP TABLE File_names的文件,会发生什么情况)。