FTP 使用 FileMaker 或 Applescript 下载最新文件
FTP download latest file using FileMaker or Applescript
我目前使用 Insert URL 从外部 FTP 位置下载某些文件,我已经设法使用以下 curl 选项完美地工作
--user " & $usr & ":" & $pw & " -o Stock-Summary.csv"
这按预期工作并从 FTP 下载文件,但是,向我们提供这些文件的公司可以说 "moved the goalposts"。
无论出于何种原因,他们现在都在为所述文件添加前缀和后缀随机数,所以我需要对其进行调整,以某种方式只获取该文件的最新版本,现在看起来像这样 -
7818023-Stock_Summary-035831
任何建议或不同的方法将不胜感激,因为我只是一个试图帮助家人朋友的新手。
如果您想要从新文件标识符中提取 "Stock_Summary",那么可以这样做:
on StripNumbers(FileLong)
set x to offset of "-" in FileLong
set temp to characters (x + 1) thru -1 of FileLong as string
set x to offset of "-" in temp
set temp to characters 1 thru (x - 1) of temp as string
return temp
end StripNumbers
on run
set FileLong to "7818023-Stock_Summary-035831"
set FileShort to my StripNumbers(FileLong)
end run
然后您可以添加扩展程序和 运行 您的 FTP 脚本。
查看之前的回答,Retrieving the last modified file in a directory over FTP using a bash script with curl。
特别是Bash、
这一行
curl --user <<USERNAME>>:<<PASSWORD>> ftp://<<SERVERURL>> 2>/dev/null | grep "Stock_Summary" | awk -F\ '{print }' | sort -n -t- -k3,4 -k1,2 -k2,2 | tail -1
将 return 目录中与给定 grep 模式匹配的最后修改文件的名称。然后您可以获取该调用的结果并将文件名(带有额外标识符)提供给您现有的 AppleScript。
set theFileName to do shell script "<<SHELL LINE ABOVE>>"
您可能需要尝试使用 grep 的文件模式来获得适合您的内容。
然后你会回到你现有的代码,把它变成这样的,
--user " & $usr & ":" & $pw & " -o " & theFileName
注意:删除并填写 << 和 >> 之间的所有内容,包括 << 和 >>。
在 AppleScript 中,这可能看起来像:
on GetFileNameToPull(server, username, password, filePattern)
set theScriptToRun to "curl --user " & username & ":" & password & " ftp://" & server & " 2>/dev/null | grep '" & filePattern & "' | awk -F\ '{print }' | sort -n -t- -k3,4 -k1,2 -k2,2 | tail -1"
set theFileName to do shell script theScriptToRun
return theFileName
end GetFileNameToPull
on GetFileNameFromFTPServer(server, username, password, remoteFileName, localFileName)
set theScriptToRun to "curl --silent --show-error --user " & username & ":" & password & " ftp://" & server & "/" & remoteFileName & " -o " & localFileName
do shell script theScriptToRun
end GetFileNameFromFTPServer
on run
set username to "USERNAME"
set thePassword to "PASSWORD"
set server to "SERVERNAME"
set pathToDownload to "/path/to/download/to"
set theRemoteFileName to GetFileNameToPull(server, username, thePassword, "Stock_Summary")
set theLocalFileName to pathToDownload & "/" & theRemoteFileName
GetFileNameFromFTPServer(server, username, thePassword, theRemoteFileName, theLocalFileName)
end run
我目前使用 Insert URL 从外部 FTP 位置下载某些文件,我已经设法使用以下 curl 选项完美地工作
--user " & $usr & ":" & $pw & " -o Stock-Summary.csv"
这按预期工作并从 FTP 下载文件,但是,向我们提供这些文件的公司可以说 "moved the goalposts"。
无论出于何种原因,他们现在都在为所述文件添加前缀和后缀随机数,所以我需要对其进行调整,以某种方式只获取该文件的最新版本,现在看起来像这样 -
7818023-Stock_Summary-035831
任何建议或不同的方法将不胜感激,因为我只是一个试图帮助家人朋友的新手。
如果您想要从新文件标识符中提取 "Stock_Summary",那么可以这样做:
on StripNumbers(FileLong)
set x to offset of "-" in FileLong
set temp to characters (x + 1) thru -1 of FileLong as string
set x to offset of "-" in temp
set temp to characters 1 thru (x - 1) of temp as string
return temp
end StripNumbers
on run
set FileLong to "7818023-Stock_Summary-035831"
set FileShort to my StripNumbers(FileLong)
end run
然后您可以添加扩展程序和 运行 您的 FTP 脚本。
查看之前的回答,Retrieving the last modified file in a directory over FTP using a bash script with curl。
特别是Bash、
这一行curl --user <<USERNAME>>:<<PASSWORD>> ftp://<<SERVERURL>> 2>/dev/null | grep "Stock_Summary" | awk -F\ '{print }' | sort -n -t- -k3,4 -k1,2 -k2,2 | tail -1
将 return 目录中与给定 grep 模式匹配的最后修改文件的名称。然后您可以获取该调用的结果并将文件名(带有额外标识符)提供给您现有的 AppleScript。
set theFileName to do shell script "<<SHELL LINE ABOVE>>"
您可能需要尝试使用 grep 的文件模式来获得适合您的内容。
然后你会回到你现有的代码,把它变成这样的,
--user " & $usr & ":" & $pw & " -o " & theFileName
注意:删除并填写 << 和 >> 之间的所有内容,包括 << 和 >>。
在 AppleScript 中,这可能看起来像:
on GetFileNameToPull(server, username, password, filePattern)
set theScriptToRun to "curl --user " & username & ":" & password & " ftp://" & server & " 2>/dev/null | grep '" & filePattern & "' | awk -F\ '{print }' | sort -n -t- -k3,4 -k1,2 -k2,2 | tail -1"
set theFileName to do shell script theScriptToRun
return theFileName
end GetFileNameToPull
on GetFileNameFromFTPServer(server, username, password, remoteFileName, localFileName)
set theScriptToRun to "curl --silent --show-error --user " & username & ":" & password & " ftp://" & server & "/" & remoteFileName & " -o " & localFileName
do shell script theScriptToRun
end GetFileNameFromFTPServer
on run
set username to "USERNAME"
set thePassword to "PASSWORD"
set server to "SERVERNAME"
set pathToDownload to "/path/to/download/to"
set theRemoteFileName to GetFileNameToPull(server, username, thePassword, "Stock_Summary")
set theLocalFileName to pathToDownload & "/" & theRemoteFileName
GetFileNameFromFTPServer(server, username, thePassword, theRemoteFileName, theLocalFileName)
end run