如何获取文件自上次读取以来最后更改的内容?
比这更精确的东西:
tail - <nr >file_1.txt >file_2.txt
其中 file_2.txt 获取最后修改的内容。
答案1
我能想到做这样的事情的唯一方法是在您上次读取文件时以临时名称保留文件的副本,然后当您再次重新读取它时,您需要使用诸如diff
比较之类的工具先前读取的文件副本以及文件的当前版本。
例子
一些示例文件。
$ seq 10 > somefile.txt
$ ls -l |grep somefile.txt
-rw-rw-r-- 1 saml saml 21 Oct 26 13:29 somefile.txt
现在我们来读一下。
$ cat somefile.txt | tee somefile_READ1.txt
1
2
3
4
5
6
7
8
9
10
这里的命令tee
将向我们显示该文件并创建一个“备份”副本,该副本向我们显示下次读取的行。我们现在只剩下这些文件:
$ ls -l |grep somefile
-rw-rw-r-- 1 saml saml 21 Oct 26 13:30 somefile_READ1.txt
-rw-rw-r-- 1 saml saml 21 Oct 26 13:29 somefile.txt
现在添加了一些额外的行:
$ seq 11 20 >> somefile.txt
通过比较两个文件的日期,我们可以看到自上次读取以来的写入日期:
$ ls -l |grep somefile
-rw-rw-r-- 1 saml saml 21 Oct 26 13:30 somefile_READ1.txt
-rw-rw-r-- 1 saml saml 51 Oct 26 13:32 somefile.txt
现在比较这两个文件:
$ diff -y somefile.txt somefile_READ1.txt | column -t
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 <
12 <
13 <
14 <
15 <
16 <
17 <
18 <
19 <
20 <
在上面我们可以看到并排的两个文件。更新后的文件内容位于左侧,原始内容位于右侧。
如果您只想查看差异,可以使用以下形式diff
:
$ diff somefile.txt somefile_READ1.txt
11,20d10
< 11
< 12
< 13
< 14
< 15
< 16
< 17
< 18
< 19
< 20