我试图扫描一个文件夹以查找新文件并读取这些文件并将其内容插入数据库,然后在这里从folder.Till中删除文件,但问题是整个内容被插入到数据库中的一个字段中。以下是代码:
inotifywait -m /home/a/b/c -e create -e moved_to |
while read path action file; do
for filename in `ls -1 /home/a/b/c/*.txt`
do
while read line
do
echo $filename $line
mysql -uroot -p -Bse "use datatable; INSERT INTO
table_entries (file,data ) VALUES ('$filename','$line'); "
done <$filename
done
find /home/a/b/c -type f -name "*.txt" -delete
done基本上这些文件包括:名称,地址,contact_no,电子邮件。我希望在数据库中从一个文件插入到另一个名称字段,在地址中插入地址。在php中,我们使用what来分割数据,我在shell脚本中使用什么?
发布于 2017-11-21 16:52:17
如果使用负载数据信息,这将容易得多(有关语法和选项的完整说明,请参阅手册)。
像这样的东西(虽然我还没有测试):
inotifywait -m /home/a/b/c -e create -e moved_to |
while read path action file; do
for filename in `ls -1 /home/a/b/c/*.txt`
do
mysql datatable -e "LOAD DATA LOCAL INFILE '$filename'
INTO TABLE table_entries (name, address, contact_no, email)
SET file='$filename'"
done
find /home/a/b/c -type f -name "*.txt" -delete
done编辑:我指定了mysql datatable,这就像使用USE datatable;设置默认数据库一样。这将解决有关“未选择数据库”的错误。
您作为(name, address, contact_no, email)列出的列将表中的列命名,它们必须与输入文件中的列匹配。如果表中有另一列要设置,而不是来自输入文件中的数据,则使用SET file='$filename'子句。
在删除*.txt文件之前,还应该使用一些错误检查来确保导入成功。
注意,LOAD假设行以换行符(\n)结尾,字段由选项卡(\t)分隔。如果文本文件使用逗号或其他分隔符,则可以向语句添加语法,以自定义其读取文件的方式。文档展示了如何做到这一点,并举了许多例子:https://dev.mysql.com/doc/refman/5.7/en/load-data.html --我建议您花点时间阅读它。它真的不是很长。
https://stackoverflow.com/questions/47418184
复制相似问题