如何在unix中压缩最新创建的文件
我想压缩在特定日期创建的文件数。我使用了这个命令如何在unix中压缩最新创建的文件,unix,zip,Unix,Zip,我想压缩在特定日期创建的文件数。我使用了这个命令 zip -rt 06222012 TEST root/*.csv 此命令压缩根目录中的所有文件,扩展名为.csv,创建日期>=22/6/2012 但这不符合我的要求。我的要求是。。 假设有两个脚本a.sh和b.sh a、 sh(手动运行)在2012年6月22日凌晨1:00执行,在2012年6月22日凌晨4:00完成,并创建4.csv文件 此b.sh文件于2012年6月22日上午6:00通过cron作业执行,并于2012年6月22日上午10:00
zip -rt 06222012 TEST root/*.csv
此命令压缩根目录中的所有文件,扩展名为.csv,创建日期>=22/6/2012
但这不符合我的要求。我的要求是。。
假设有两个脚本a.sh和b.sh
a、 sh(手动运行)在2012年6月22日凌晨1:00执行,在2012年6月22日凌晨4:00完成,并创建4.csv文件
此b.sh文件于2012年6月22日上午6:00通过cron作业执行,并于2012年6月22日上午10:00完成,并创建5.csv文件
上面的zip命令将压缩所有这9个文件,因为它们是在2012年6月22日当天创建的,但我只需要5个.csv文件,这些文件仅由b.sh创建,这意味着这些文件是在2012年6月22日上午10:00创建的
在上面的zip命令中,我也可以给出小时和分钟吗?鉴于上述评论中已经提到的事实,使用标准文件系统,您唯一的机会是近似于“上次修改的文件”创建的“文件”,您可能希望使用
查找来解决此问题
关于stackoverflow已经有一篇很好的文章(请参阅:)
就您的情况而言,-newerXY
选项可能是最适合以下问题的选项:
zip -r TEST `find root -name"*.csv" -newermt 10:00`
根据创建它们的脚本,为*.csv
指定一个更明确的名称如何?如果对a.sh
执行*4.csv
,则可以zip-rt 062222012测试根目录/*4.csv
。请注意,-t
选项处理的是修改时间,而不是创建时间。在POSIX中,不会记录文件的创建时间。谢谢大家。实际上,这些文件是由一个sql过程创建的,该过程由两个脚本a.sh和b.sh调用,一个是手动调用的rum,另一个是通过cron job调用的。文件名包含年、月和某些特定名称。这些内容是在sql过程中动态生成的。我错过了上面的一个测试用例。我认为通过这段代码我将无法压缩正确的文件,因为假设手动脚本(a.sh)在2012年4月26日上午4点到2012年4月26日上午10点创建4个文件,1个文件在4:30创建,另一个文件在6:30创建,另一个文件在8:00创建,最后一个文件在10:00现在,当cron作业(b.sh)在2012年4月26日上午6点到2012年4月26日下午2点执行时,1个文件在6:30创建,上午9点还有一次,以此类推。因此,如果您看到我压缩了这段代码,我最终将压缩通过a.sh创建的一些文件,我不需要这些文件。我现在只看到这个选项,即当sql过程运行并创建文件时,我将这些名称写入某个临时文件,然后通过unix读取该文件并仅压缩这些特定文件。如果您看到任何其他选项,在不更改.sql文件的情况下,这也可以通过unix脚本实现,请告诉我如果我正确理解您的问题,那么您感兴趣的只是通过运行b.sh生成的文件。如果是这种情况,而不是试图找出哪些文件是由b.sh创建的,那么在b.sh中创建后直接对其进行压缩可能是一个更好的主意。如果直接从b.sh脚本压缩,则无需通过某种神秘的魔法尝试找出哪个脚本创建了文件,因为信息直接存在。作为一种替代方法,您可以尝试使用不同的名称标记文件-例如,xxx.a.csv``和
xxx.b.csv`,如果这不会破坏任何内容。是的,我就是这么做的,但我必须在生成这些文件的.sql文件中进行标记,而不是在b.sh中进行标记。sql我将所需文件的名称临时存储在一个特定的临时文件中。然后从b.sh中,我读取了临时文件并压缩了相应的文件。成功了:)