2010-07-12 65 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的文件,會發生什麼情況)。