【问题标题】:Folder action not triggering shell script文件夹操作未触发 shell 脚本
【发布时间】:2016-12-04 13:03:27
【问题描述】:

我有一些软件可以将名为My Library.bib 的文件导出到名为thesis 的文件夹中。假设导出文件的名称是固定的。每次导出这样的文件,我都想:

  1. 删除任何名为MyLibrary.bib 的旧文件(如果存在)。
  2. 从这个新文件中删除空间,使其成为最新的MyLibrary.bib

我已尝试按如下方式制作 Automator 的“文件夹操作”:

...然而,如果手动运行 shell 脚本可以完美运行,文件夹操作本身似乎永远不会触发。

文件夹操作仍处于启用状态(请参阅下面的设置),并且其他文件夹操作似乎确实有效。

总之,我只希望任何进入thesis 文件夹的名为My Library.bib 的文件(在任何时候,自动)重命名为MyLibrary.bib,替换任何现有的MyLibrary.bib 文件。任何想法出了什么问题,或者如何实现这一目标?提前致谢。

【问题讨论】:

  • 你把脚本保存在~/Library/Scripts/Folder Action Scripts吗?
  • @MarkSetchell 否 - 它自动保存到 ~/Library/Workflows/Applications/Folder Actions(我听说默认位置在 Mac OS X 版本上发生了变化)。但是,在您建议的路径中尝试也没有效果。

标签: bash shell directory osx-elcapitan automator


【解决方案1】:

当您使用“Run Shell Script”操作时,当前目录是Home文件夹,而不是“thesis”文件夹。

所以,你必须使用cd命令来改变当前目录

信息:

  • 获取文件夹内容”操作对您想要做的事情毫无用处, 你可以删除它。
  • rm 命令不是必须的,您可以使用mv -f 来 覆盖现有文件

read firstLine ### get the path of the first dropped item
myDir=$(dirname "$firstLine") ### get the parent (this folder action)
cd "$myDir" && if [ -f "My Library.bib" ]; then 
    mv -f "My Library.bib" "MyLibrary.bib"
fi

【讨论】:

  • if-statement 同样没用。只需mv -f "My Library.bib" "MyLibrary.bib"
  • @Kusalananda,是的,但是当没有这样的文件时,工作流会在日志文件中出错 --> FolderActionsDispatcher[365]: error: {}