这里有一个问题,有人能解释一下或提供一些参考吗?我已经尝试阅读了一个小时,但找不到答案。
假设,我让进程 1 处理一个目录池。进程 1 选择一个目录并在其中创建 .csv 文件。进程 1 继续处理目录 1 时,.csv 文件会被追加,因此是不完整的。然后,进程 1 继续处理目录 2,依此类推。
现在,我想对 process1 已完成处理的目录中的 csvs 进行一些操作。理想情况下,我应该检查已完成处理的目录,并在这些目录中运行 process2。但凭借我的无限智慧,我这样做了:
查找目录* -type f -name '*.csv' -exec process2
我的假设是,find 将首先找到在调用 find 之前存在的所有 csv,然后仅对这些 csv 执行 -exec process2,而忽略在调用 find 之后生成的任何 csv。
看来我错了(仍然不确定)。有人能解释一下吗?
谢谢。
答案1
使用 -exec 的方式find
是,在找到每个文件时调用 exec 进程。如果您想从快照开始工作,最好这样做:
find directories* -type f -name '*.csv' > /tmp/filelist
cat /tmp/filelist | while read file; do
process2 $file # I'm assuming you want to pass the filename somehow...
done;
同样,您仍然不知道实际写入了哪些,因此您必须单独解决这个问题。