Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在Mac OSX/Finder中复制/复制目录后如何触发脚本_Macos_Callback_Finder - Fatal编程技术网

Macos 在Mac OSX/Finder中复制/复制目录后如何触发脚本

Macos 在Mac OSX/Finder中复制/复制目录后如何触发脚本,macos,callback,finder,Macos,Callback,Finder,在SnowLeopard中,每当用户在Finder中复制目录时,我都希望触发一个脚本/代码。我该怎么做 我一直在寻找文档,但我对这类工作太陌生了,无法识别正确的方法 动机:如果一个目录处于版本控制之下,比如说使用git、hg或svn,并且用户复制了该目录,那么我想运行一个脚本,搜索原始目录,然后在版本控制中创建一个“标记”。如果用户重命名dir,比如说在10秒内,那么重命名将是标记注释的一部分。我最终还想添加一些覆盖图标来指示dir的版本控制状态 扩展动机:我面临的问题是,在我看来,像git和h

在SnowLeopard中,每当用户在Finder中复制目录时,我都希望触发一个脚本/代码。我该怎么做

我一直在寻找文档,但我对这类工作太陌生了,无法识别正确的方法

动机:如果一个目录处于版本控制之下,比如说使用git、hg或svn,并且用户复制了该目录,那么我想运行一个脚本,搜索原始目录,然后在版本控制中创建一个“标记”。如果用户重命名dir,比如说在10秒内,那么重命名将是标记注释的一部分。我最终还想添加一些覆盖图标来指示dir的版本控制状态

扩展动机:我面临的问题是,在我看来,像git和hg这样的版本控制软件太复杂了,也就是说,因为它与文件系统的连接太断开了,就像影子文件系统一样。我非常喜欢版本控制,并且已经使用它很多年了——但我也看到了部署的局限性,因为它的复杂性。事实上,如果代码更易于使用,那么更多的代码将处于版本控制之下

我正在研究创建一个不需要终端访问的更易于使用的VCS系统的可行性。想象一下,如果苹果将其作为finder和/或iLife的一部分,版本控制(代码)会是什么样子——简单但足够好。实际上,我显然不打算重新发明vcs,但我希望为hg之类的东西构建一个模块/插件,并将其与vcs如何为以finder为中心的UI工作的重新设想结合起来——所有这些都是为了为更随意的程序员创建一个更简单但足够好的vcs

检测目录复制和重命名的第一个技术障碍就是这个问题

文件数:由于此项目的主要动机是源代码版本控制,因此我只需要匹配与您正在处理的项目数匹配的目录数。因此,如果您正在处理两个不同的项目,那么,我认为,我只需要跟踪两个目录——每个项目的根目录。现在,我完全承认,在这一点上,我可能错误地描述了需求,因此,可能我需要跟踪项目中的所有目录,或者甚至是这些项目中的所有文件,因此,为了论证起见,让我们假设一个项目中通常有1000个文件。所以,基本上,可能只有几个目录,或者几百个目录,或者几千个文件。重要的是,我认为50000个文件将处于频谱的高端

用户从finder中复制目录“trunk”

中继-->中继拷贝

如果用户将“trunk copy”重命名为“trunk copy fixed#255 per colors” trunk dir(不是副本)将被标记为 注释“已修复#每种颜色255个”

参考资料

    • 启动时,如果已注册目录中的某个内容发生更改—如果大目录中的任何一个文件发生更改,则会收到通知。它不会告诉你,我不认为,是什么改变了
    • 您可以注册以获得单个文件级别的通知。您的选项(至少)如下: 注|删除|注|写|注|扩展|注|属性|注|链接|注|重命名|注|撤销这可能用于检测目录重命名(对dirs有效吗?),但显然不是dir副本
稍微相关的问题

谢谢,
JJ

如果您只想在某些文件夹上触发此脚本,那么您应该使用Apple所称的“文件夹操作”,您可以将其附加到您喜欢的Apple脚本文件夹中


我不知道Finder会触发什么,但如果我带着mac,我会打开automater并在“文件和文件夹”下查看,我100%相信你会在那里找到一个复制或复制事件。

听起来文件系统事件就是你想要的。也许你回避它是因为它看起来很复杂,但我认为你试图做的事情总的来说是复杂的

Spotlight和Time Machine使用文件系统事件来确定文件系统中发生了哪些更改,因此需要索引或备份哪些文件。您的需求类似,只是您希望检查更新的目录是否存在于源代码管理中,而不是备份,如果不存在,则确定是否应该向源代码管理中添加某些内容(新目录或标记或其他内容)

在Finder中可能有一种方法可以做到这一点,但您可能还想知道用户是否从命令行或其他程序复制目录

你能更详细地谈谈你对这项功能的动机吗?听起来,您正试图让用户“使用”源代码管理,而无需实际学习它。“只需复制目录,集成代码就会处理好一切。”但我认为,如果您试图将非常一般的文件系统更改解释为隐式的源代码控制命令,就会遇到问题。

在automator脚本中,finder/系统没有“on duplicate”和“on rename”事件,因此,确切地说,您所要求的是使用文件系统事件(我不打算详细介绍),但需要使用以下快速applescript

  • 捕获添加到文件夹中的所有项目(包括通过复制添加的项目)
  • 要求用户提供标记名
  • 使用此信息运行bash脚本
这将使您能够构建一个好的解决方案

  • 将additem.scpt放在/Library/Scripts/文件夹操作脚本中
  • 包含trunk的文件夹中的fixup.sh(或调整并放置在您喜欢的位置)
  • 在包含文件夹上,单击鼠标右键并选择
    on adding folder items to this_folder after receiving added_items
            try
                    tell application "Finder"
                            set the folder_name to the name of this_folder
                    end tell
    
                    set the item_count to the number of items in the added_items
    
                    repeat with an_added_item in added_items
                            tell application "Finder"
                                    set item_name to name of an_added_item
                            end tell
    
                            set new_name to text returned of (display dialog "Please enter tag name " default answer item_name buttons {"Continue…"} default button 1)
    
                            set the scriptcode to "\"" & POSIX path of this_folder & "fixup.sh\" \"" & POSIX path of an_added_item & "\" \"" & new_name & "\""
                            display dialog scriptcode
                            do shell script scriptcode
                    end repeat
            end try
    end adding folder items to
    
    #!/bin/bash
    
    if [ -d "$1" ]
    then
      echo asked to fixup \"$1\" >> /tmp/fixup.log
    fi