问题描述:
我有一个包含一组文件的目录,这些文件名保存在表中,称为“File_names” 我想制作在目录上循环的shell脚本,每次搜索数据库中是否存在该文件名,如果没有,则将该名称插入数据库。否则什么都不做。
我的踪迹:
FILES=/path/*
for f in $FILES
do
echo $f
done
但是这里的$ f包含路径+名称,我希望这个名称只能像:
count = " select count(*) from File_names where name = $f"
我该怎么做?
先谢谢
答案 0 :(得分:2)
我发现你的问题不是很清楚;据我所知,我会回答它的shell部分。
据我了解,您希望对目录中的每个文件运行命令。但是你只对文件的基本名称感兴趣,即没有目录部分。
备选方案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
的文件会发生什么)。