linux - 如何不处理之前已经处理过的文件? (它们不会被压缩或重命名)

标签 linux bash file

我对包含大量名称以 SystemOut* 开头的日志的文件夹具有只读访问权限:

SystemOut_15.03.12_1215124.log
SystemOut_15.03.12_23624.log
SystemOut_15.03.02_845645.log
SystemOut_15.03.14_745665.log
SystemOut_15.03.16_456457.log
SystemOut_15.03.07_474574.log

日志未压缩或重命名。

我需要实现的是以这样一种方式解析它们,使得已经处理过的日志不会被再次处理。此外,强制条件是不处理具有最新修改日期和时间的日志。

我可能会认为我需要在我具有写入权限的位置创建一个单独的文件,其中包含我的脚本已经处理过的日志名称?

如果您能提供一些建议以及如何实现这些建议,我们将不胜感激。 谢谢

最佳答案

我同意在单独的文件中跟踪您已处理的日志是个好主意。从你的问题中不清楚你将如何识别当前日志,所以我把它留给你。

尝试这样的事情:

mysavedfiles=/some/path/file.txt
curfile=$(ls -tr | tail -n 1)
for fn in logfiles/*.log
do
    if ! grep -q $fn $mysavedfiles && [ "$fn" != "$curfile" ]
    then
        ... process it ...
        echo $fn >>$mysavedfiles
    fi
done

您还可以通过更改为由某些处理提供的 while read 循环来排除最后一个文件:

ls -tr logfile/*.log | head -n -1 | while read fn
do
    ....
done

关于linux - 如何不处理之前已经处理过的文件? (它们不会被压缩或重命名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29163047/

相关文章:

c++ - 测量 NUMA(非统一内存访问)。没有可观察到的不对称性。为什么?

linux - perl 无法在 linux 上获取 SSL 套接字

c++ - 我不断收到 clang : error: no input files in C++

Python ini 解析器

linux - 在 sh 中对字符串使用运算符

java - 将行从文件复制到另一个文件

linux - debian wget 无法 fork

regex - sed 用正则表达式替换 bbcodes

linux - 作为 bash 脚本调用时如何替换命令名称?

linux - 在另一个比较中使用 bash 比较的结果