检查另一个位置的文件是否存在,然后根据 Unix 中的条件复制文件

Check file existence in another location and then copy files based on condition in Unix

在运行dom times有一个用户放置文件的文件夹。这些文件都是只读的。我们需要每小时读取一次文件,如果最近一小时内有文件,我们需要将其复制(不是删除或更改)到另一个目录。这些文件通常是模式 Bank_YYMMDD.csv,其中 YYMMDD 是可变的,例如:Bank_20200927.csv.

/outbound是放文件的地方,/daily是需要复制文件的地方。 我试过下面的代码,它工作正常。

find /outbound -type f -mmin -60 -name "Bank*" | xargs -ILIST cp LIST /daily/

问题部分: 一旦文件被放置在 /daily 中,一个单独的业务流程会检查和处理这些文件,并在处理后将它们移至 /processed。 还有一个额外的要求是检查已处理的文件夹,即 /processed,如果我们尝试放置的文件已经存在于 /processed 文件夹中,则不要将此文件复制到 /daily。

例如:3 个文件在过去一小时内被放置或修改在 /outbound 假设这 3 个文件是 Bank_20200927.csv、Bank_20200926.csv 和 Bank_20200925.csv。 在这 3 个文件中,进程 运行 较早并且已经选择了 Bank_20200926.csv 和 Bank_20200925.csv 并将它们放在 /daily 中。然后业务流程 运行 和现在 /processed 文件夹已经有 Bank_20200926.csv 和 Bank_20200925.csv.

所以这次即使 Bank_20200926.csv 和 Bank_20200925.csv 在修改时被选中并且满足最后一小时的修改检查唯一要复制到 /daily 文件夹的文件将是 Bank_20200927.csv.

我坚持检查 /processed 是否有文件,如果没有,则将其放在 /daily 中。

请帮忙。

提前致谢。

可以使用类似的东西:

for i in /outbound/*.csv;do [[ $(($(date +"%s")-$(stat -c %Y $i))) -lt 3600 && ! -e /processed/${i##*/} ]] && cp $i /daily/;done