目标:当多个.csv文件上传到文件夹时,代码应该检查每个文件名,如果文件名合适,sqlloader应该进一步使用文件来获取上传到数据库中的数据。上传文件后,代码应删除已处理的文件。下一次,同样的过程重复。
我有一些代码工作,但有些正在产生问题,特别是与 inotifywait 相关。请帮忙。
在第一个循环中,我试图监视 /uploads 文件夹,当它找到 .csv 文件时,它会检查文件名是否有空间。如果是,它想将空间更改为文件名中的下划线。我一直在尝试找到一种在文件名中找到“空格、() 或”的方法,但只能更改“空格”部分。这给了我一个错误,即文件无法移动,没有这样的文件或目录。
第二个循环单独工作,但在与第一个循环合并时不工作,因为存在我无法调试的错误。如果我单独运行第二个循环,它工作正常。但是,如果有一种方法可以在一个循环中更好地优化代码,我会很高兴知道。谢谢!
示例:文件夹名称:/../../upload
文件名:abc_123.csv(代码不应进行任何更改)、pqr(12 Apr).csv(代码应将其更改为 pqr_12_Apr.csv)、May 12.csv(代码应将其更改为 May_12.csv)等。一旦这些3个文件有适当的命名,应该可以通过sql loader上传,一旦文件被处理,它们就会被删除。
我的代码是:
#!bin/bash
inotifywait -mqe create /../../upload | while read file; do
if [[ $file = '* *'.csv]]; then
mv "$file" ${file// /_}
fi
done
for file in /../..upload/*.csv
do
sqlcommand="sqlldr user/pwd control="/../xxx.ctl" data=$file silent=feedback, header"
$sqlcommand
rm $file
done
谢谢!