检查另一个位置的文件是否存在,然后根据 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
在运行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