我已经有了一个完整的 AppleScript 查找和替换脚本,但由于 UNIX 的进程密集程度较低,我一直在尝试看看是否有更好的方法来为目录编写查找和替换脚本。
Set myFind to “string.to.find”
Set myReplace to “new.string”
Tell application “Finder” to set myPath to the POSIX path of (target of front window as alias)
Do shell script (“echo myTarget = “ & myPath)
—// this is where I fall down
Do shell script “grep -l “ & myFind & space & myPath & “ | xargs sed -i ‘s/“ & myFind & “/“ & myReplace & “/g”
我不喜欢这段代码,如果有一种更简单更好的方法可以使用以下简单信息更改目标文件夹中的多个文件 小路 寻找 更换
我很高兴能得到纠正
提前谢谢您
试试这个:
它使用 find 生成目标文件夹中的文件列表(但不包括子文件夹中的任何文件)。然后,它将该列表提供给 xargs,xargs 将每个文件提供给 sed。
Sed 对每个文件中“string.to.find”的每个实例进行简单的查找和替换,然后将该文件保存到位,同时还创建原始文件的备份(扩展名为“orig”。
use scripting additions
set myFind to "string.to.find"
set myReplace to "new.string"
tell application "Finder" to set myPath to the POSIX path of (target of front window as alias)
set qpath to quoted form of myPath
set cmd to "find " & qpath & " ! -iname '*.orig' -maxdepth 1 -type f -print0 | xargs -0 -J % sed -i.orig 's/string\\.to\\.find/new.string/g' %"
do shell script cmd
备注:
find
命令会搜索不具有“orig”扩展名的文件。xargs
使用 -J 选项使 sed
一次仅处理单个文件。 %
被 sed 处理的每个文件名替换。cd
替换为目录并将 'qpath' 替换为句点 ('.')。顺便说一句,本机 applescript 可以相当有效地处理此类编辑(假设您没有无数的巨型文件需要处理)。可能有一种高效的 ASObjC 方法可以在这种情况下表现良好。