在macOS上,我一直使用存储为服务的Automator工作流程来运行以下bash脚本:
for dir; do
cd "$dir"
"$HOME"/fixFoldersDateMod "$dir"
done
这将在Finder中选择的文件夹上运行fixFoldersDateMod
命令脚本,以修复文件夹结构的上次修改日期,递归地将所有文件夹设置为其中包含的所有文件/文件夹的最近修改日期。
但是最近,我在一个包含一些包的文件夹上运行了工作流,所有的包和其中的文件夹也都被修改了!现在我正在尝试找到一种方法来修改脚本,以根据它们的扩展名排除各种包及其内容。
下面是我尝试过的修改过的脚本(不能正常工作):
temp=(vst|vst3|app|component|aaxplugin|dpm)
pattern="(^|:)$temp(:|$)"
for dir; do
if [[ ! $dir =~ $pattern ]] ; then
continue;
fi
cd "$dir"
"$HOME"/fixFoldersDateMod "$dir"
done
我不知道如何正确格式化shell脚本的正则表达式或模式匹配,但理想情况下,如果要正确工作,在Finder中选择一个文件夹并运行此工作流服务时,任何与包扩展名(vst|vst3|app|component|aaxplugin|dpm)
列表匹配的包及其内容都将被排除在我的主文件夹中的fixFoldersDateMod
脚本处理之外。
例如:
(selected folder/path - excluded?)
"/Library/Audio/Plug-Ins/VST/iZotope" - No
"/Library/Audio/Plug-Ins/VST/iZotope/Insight.vst" - Yes
"/Library/Audio/Plug-Ins/Components/Zynaptiq" - No
"/Library/Audio/Plug-Ins/Components/Zynaptiq/UNVEIL AU.component" - Yes
有人能告诉我我做错了什么吗,以及如何让它正常工作?
还有一个相关的注意事项,我如何让服务使用sudo(必要时提示输入密码)运行命令脚本,以便它也能在系统文件夹上工作?
1条答案
按热度按时间chhqkbe11#
另一种稍微不同的方法可能适合您的要求,即利用bash
case
语句和参数扩展。使用处理find
命令的输出并提取文件扩展名。如果扩展名是to-exclude列表的一部分,则跳过,否则,调整修改时间。类似于:完整示例脚本:
输出: