用于“时间戳”功能的 Linux 实用程序

用于“时间戳”功能的 Linux 实用程序

wget 的时间戳功能确保它只下载已更改的文件。我正在寻找一个 Linux 命令行工具,它将递归地将目录内容与保存的版本(从上次运行时)进行比较,并对任何新文件或更新的文件执行任意 shell 命令。基本上:

run-on-updated --directory /path/to/my/dir --last-results ~/.lastrun --exec "echo {}"

我甚至可以将其想象为“查找”命令的扩展。存在这样的工具吗?

答案1

尝试回答这个问题——可能还有很大的改进空间:

tar -cv -f /dev/null -g ~/.lastrun /path/to/my/dir | grep -ve '/$' | xargs -I{} echo '{}'

tar 命令的注释:“选项 '-g' 指示 tar 对增量存档进行操作,并将附加元数据存储在独立文件(称为快照文件)中。此文件的目的是帮助确定自上次备份以来哪些文件已被更改、添加或删除,以便下一次增量备份将仅包含已修改的文件。”(引自文档)

grep命令排除 tar 始终输出的目录名(以 / 结尾),最后xargs将对文件运行所需的命令。

答案2

我不确定“将目录内容与保存的版本进行比较”这句话的意思,但要执行 mpy 的答案所做的操作,我更愿意find

第一次运行该命令之前find,需要运行该touch命令来创建时间戳文件:

touch .lastrun

稍后,在 find 运行后运行 touch 命令:

find my/dir -type f -newer .lastrun -exec echo '{}' \;
touch .lastrun

该文件.lastrun永远不会被列出,因为它永远不会比其自身更新。

相关内容