linux - 如何在处理开始之前控制 Linux 中的文件 - bash
问题描述
我目前正在做一个项目来自动化我办公室的手动任务。我们有一个流程,当我们的一些 ID 出现故障时,我们必须重新触发它们。作为该过程的一部分,我们必须从 oracle DB 表中提取这些 ID,然后将其放入我们的 Linux 服务器上的文件并运行如下命令 -
示例文件:
$cat /task/abc_YYYYMMDD_1.txt
23456
45678
...等等
cat abc_YYYYMMDD_1.txt | scripttoprocess -args
我正在使用一个名为“scripttoprocess”的现有基于 java 的代码。我看不到这段代码里面有什么,因为它在我的脚本中是加密的(看起来)。我只需转到我的文件所在的位置,然后像这样使用它:
cd /export/incoming/task
for i in `ls abc_YYYYMMDD*.txt`;do
cat $i | scripttoprocess -args
if [ $? -eq 0];then
mv $i /export/incoming/HIST/
fi
done
scripttoprocess 是和现有的脚本。我只是在我自己的脚本中调用它。我的脚本在后台循环运行。它只是在 /task 目录中搜索 abc_YYYYMMDD_1.txt 文件,如果检测到这样的文件,则开始处理该文件。但是我注意到我的脚本在文件完全写入之前就开始处理文件,并且有时将文件移动到 HIST 而不完全处理它。
这种情况怎么可能处理。我想在开始处理之前完全确定该文件已完全写入。其次,有什么方法可以控制文件,比如准备一个控制文件,其中包含 /task 目录中存在的文件列表。然后我可以 cat 这个控制文件并从里面提取文件名?您的指导将不胜感激。
解决方案
我用了
iwatch -e close_write -c "/usr/bin/pdflatex -interaction batchmode %f" document.tex
在写入文件 ( ) 后关闭文件时运行命令(Latex 到 PDF 转换)document.tex
,您也可以这样做。
但是,有一个警告:这只是为了捕获对文件的手动编辑,失败并不重要。因此,这忽略了关闭后立即打开并再次写入的情况。问问自己这对你来说是否足够好。
推荐阅读
- java - Hibernate - 如果不存在,则将 orderBy() 添加到 DetachedCriteria?
- google-sheets - 带有超链接的 FILTER 和 REGEXREPLACE 单元格
- ms-access - MS Access VBA,只有在所有必需的文本框都包含有效数据后才启用按钮的有效方法
- php - PHP在新表单后删除变量
- javascript - 为什么包含 document.domain 警报框的基于数据的 url 为空?
- html - Firebase 下载 url在浏览器中打开 csv 文件
- python - 一直有效的 Python 文件突然得到 json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
- java - 为什么我的 prefixAgain 代码不起作用?
- python - 解析两个大数据帧时出现内存错误
- javascript - puppeteer 事件错误处理程序不要去捕获块