Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 检查文件是否存在于其他位置,然后根据Unix中的条件复制文件_Shell_Unix_Sh - Fatal编程技术网

Shell 检查文件是否存在于其他位置,然后根据Unix中的条件复制文件

Shell 检查文件是否存在于其他位置,然后根据Unix中的条件复制文件,shell,unix,sh,Shell,Unix,Sh,有一个文件夹,用户可以在其中随机放置文件。这些文件都是只读的。我们需要每小时读取一次文件,如果在过去一小时内有文件,我们需要将其复制(而不是删除或更改)到另一个目录。文件通常为Bank_yymdd.csv模式,其中yymdd是变量,例如:Bank_20200927.csv /outbound是放置文件的位置,/daily是需要复制文件的位置。 我已经尝试了下面的代码,效果很好 find /outbound -type f -mmin -60 -name "Bank*" | x

有一个文件夹,用户可以在其中随机放置文件。这些文件都是只读的。我们需要每小时读取一次文件,如果在过去一小时内有文件,我们需要将其复制(而不是删除或更改)到另一个目录。文件通常为Bank_yymdd.csv模式,其中yymdd是变量,例如:Bank_20200927.csv

/outbound是放置文件的位置,/daily是需要复制文件的位置。 我已经尝试了下面的代码,效果很好

find /outbound -type f -mmin -60 -name "Bank*" | xargs -ILIST cp LIST /daily/
问题部分: 一旦文件被放置在/每天,一个单独的业务流程将检查和处理这些文件,并在处理后将其移动到/处理。 还有一个额外的要求是检查已处理的文件夹,即/processed,如果我们试图放置的文件已经存在于/processed文件夹中,则不要将此文件复制到/daily

Ex:3个文件在最后一个小时内放入或修改/出站 假设这3个文件是Bank_20200927.csv、Bank_20200926.csv和Bank_20200925.csv。 在这3个文件中,流程运行较早,已经选择了Bank_20200926.csv和Bank_20200925.csv,并将它们放置在/daily中。然后,业务流程已运行,且“现在/已处理”文件夹已包含Bank_20200926.csv和Bank_20200925.csv

因此,这一次,即使在修改时选择了Bank_20200926.csv和Bank_20200925.csv,并满足最后一小时内修改的检查要求,但要复制到/daily文件夹的唯一文件将是Bank_20200927.csv

我一直在用零件检查/处理是否有文件,如果没有,则将其放入/每日

请帮忙


提前感谢。

可以使用以下内容:

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

我认为我们不需要日期检查来实施。因为周一放置的文件可以从周五开始。如果星期五是假日,也可以提前一天。date语句仅用于验证文件是否少于60分钟。我只需将文件路径、文件名模式和时间更改为以下内容。对于输入/接口/sftp/output/“银行*”;do[$($(日期+%s”)-$(stat-c%Y$i))-lt 900&&!-e/interfaces/file/archive/${i##*/}]&&cp$i/interfaces/file/in/;完成后,我将其保存为.sh脚本,并尝试通过OS命令行运行它。然而,它什么也不做。它没有给我任何错误,但也没有任何作用。我有一个文件/interfaces/sftp/output/Bank_20200928.csv,但/interfaces/file/in/仍然为空。Update。复制功能在我将asterix移出“即/interfaces/sftp/output/”Bank*而不是/interfaces/sftp/output/”Bank*后工作