Macos 如何检测文本文件是否仍由TextEdit打开

Macos 如何检测文本文件是否仍由TextEdit打开,macos,file-io,process,Macos,File Io,Process,使用lsof我可以知道docx文件仍然是通过Word打开的,但是如何检测文本文件(rtf、txt等)仍然是通过TextEdit打开的?您可以使用lsof-V和grep-a 5 TextEdit来打开文件。然后,也许您可以使用pstree来识别父进程,并查看它是否为TextEdit。我会尝试为您测试一个解决方案,但brew的服务器今天似乎已停机(这是我需要安装它的原因)。基于此,您可以尝试以下操作: 命令: sudolsof-V|grep[filename] 这对我很有效,但我必须在TextEd

使用lsof我可以知道docx文件仍然是通过Word打开的,但是如何检测文本文件(rtf、txt等)仍然是通过TextEdit打开的?

您可以使用
lsof-V
grep-a 5 TextEdit
来打开文件。然后,也许您可以使用
pstree
来识别父进程,并查看它是否为TextEdit。我会尝试为您测试一个解决方案,但brew的服务器今天似乎已停机(这是我需要安装它的原因)。

基于此,您可以尝试以下操作:

命令:

  • sudolsof-V|grep[filename]

  • 这对我很有效,但我必须在TextEdit打开它之前完成:

    sudo fs|u用法| grep[filename]

应用程序:

打开Sloth后,它说这是通过TextEdit打开的:

~/Library/Containers/com.apple.TextEdit/Data
因此,您可以尝试查看TextEdit是否在其中存储任何数据:

  • sudo grep-R'[filename]'~/“Library/Containers/com.apple.TextEdit/Data”

  • sudo grep-R[filename]~/“Library/Containers/com.apple.text编辑/Data/Library/Saved Application State”


您正在编写bash脚本吗?为什么要这样做?一些上下文可以帮助您获得答案。我想在文件关闭时更改它。在windows上,如果打开此文件,则无法修改它,但在Mac上,无论是否打开,都可以修改它。所以我需要找到一种方法来检测文件是否仍被任何进程使用。非常典型的ETL用例。完成文件传输可能需要几分钟。我尝试了此方法,但在我这方面无效:(,对于TextEdit,我们似乎没有办法做到这一点。我尝试了许多方法、脚本、c代码等,我可以得到一些结果,但它们都不是我期望的结果。例如,当我们使用Work打开一个文件时,我们可以使用lsof查看该文件是否仍由“Microsoft Word”打开,但是对于TextEdit,有很多文件是通过TextEdit打开的(我觉得这些是一些辅助文件)除了我们创建的文件。我设法使用applescript来解析txt文件,但仍然无法修复rtf模式…你太酷了,sudo lsof-V对我有效,唯一的问题是它使用sudo,很难从objective c调用此命令,但我可以修复此问题,谢谢老兄!我很惊讶它对你有效!它对我无效;我必须使用use
fs_用法
fs_用法对我不起作用,当我使用此命令时,它永远不会自动退出。sloth的结果与没有sudo的lsof相同,从中你无法判断打开了哪个文件。当我使用sudo lsof-V时,我可以看到类似于“filecoord 238…aaa.rtf”的内容,如果我关闭文件,我将一无所获,而这正是我想要的。感谢
fs\u用法
永远不会退出,因为它一直在监视文件访问:)