我有纯文本文件a.txt
,b.txt
并且c.txt
我想要一个名为 that 的文件big.txt
,它是连接 a、b 和 c 的产物。
如果我编辑并附加到 a、b 或 c,它会自动更新/附加 big.txt
我该如何在 Linux/Unix 上执行此操作?
答案1
将问题分成两部分:
big.txt
当源文件更改时创建文件- 当源文件更改时自动运行第 1 部分
第#1 部分是 的工作make
,其功能是根据对源文件的编辑创建派生作品。在下面的示例中,我们说“big.txt”依赖于“a.txt”、“b.txt”和“c.txt”。当我们运行时make
,源文件的时间戳与 的时间戳进行比较big.txt
,如果较新,则big.txt
更新:
$ ls
Makefile
$ cat Makefile
big.txt: a.txt b.txt c.txt
cat a.txt b.txt c.txt > big.txt
a.txt:
b.txt:
c.txt:
$ touch {a,b,c}.txt
$ make
cat a.txt b.txt c.txt > big.txt
$ make
make: `big.txt' is up to date.
$ echo 'hello world' > a.txt
$ make
cat a.txt b.txt c.txt > big.txt
现在,编辑任何文件后,键入make
并生成 big.txt如果需要的话。
第 2 部分可以通过多种方式完成。最简单的方法是make
在后台循环运行,例如: while :; do make; sleep 60; done &
。这不是特别有效,因此您可以用来iwaitnotify
监视文件的更改,然后对它们运行 make 。看这个答案为例。
make
和 的重要注意事项Makefile
:使用选项卡缩进。这是历史上的奇事make
。