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
永远不会被列出,因为它永远不会比其自身更新。