OSX上的Bash:如何确定网络文件(AFP)是否正在使用?

时间:2013-05-11 16:48:46

标签: macos bash lsof afp

我有一个在OSX上运行的bash脚本 它需要操纵网络共享上的一些文件(Synology NAS上的AFP共享)。

不幸的是,当脚本运行时,有时仍会写入这些文件。

如何确定文件是否正在使用?

正常的方法是使用" lsof",但如果其他用户来自LAN上的其他客户端,那似乎不适用于网络文件。

我可以尝试重命名该文件。我想如果文件正在使用中会失败,但这远非优雅。

有人有更好的解决方案吗?

2 个答案:

答案 0 :(得分:3)

这不是一个通常可解决的问题。典型的解决方案是将文件写入临时位置,然后将其移动到最终处理目录(因为在文件系统中移动通常是原子的)。如果您无法控制文件的写入方式和位置,那么您将获得启发式方法,尤其是查看文件并查看文件是否在“一段时间内”没有增长,但与分离相比,这些都不是特别好来自入队的写作。

答案 1 :(得分:1)

其他潜在的访问是由任意程序完成的,还是可以假设它是由在其他客户端上运行的程序的其他实例完成的?

如果文件是程序的私有文件,那么程序的所有实例都可以参与协作锁定方案。例如,您可以使用lockfile命令。即使遇到信号/异常,也要确保清理锁文件。您可以使用trap内置命令来帮助完成此操作。有关说明,请参阅here