首页 > 解决方案 > 如何在处理开始之前控制 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 这个控制文件并从里面提取文件名?您的指导将不胜感激。

标签: linuxbashshell

解决方案


我用了

iwatch -e close_write -c "/usr/bin/pdflatex -interaction batchmode %f" document.tex

在写入文件 ( ) 后关闭文件时运行命令(Latex 到 PDF 转换)document.tex,您也可以这样做。

但是,有一个警告:这只是为了捕获对文件的手动编辑,失败并不重要。因此,这忽略了关闭后立即打开并再次写入的情况。问问自己这对你来说是否足够好。


推荐阅读