Edited at

AppleScriptでMarkdown中のリンクファイルを収集する

More than 3 years have passed since last update.

ああ、もうさわりたくない…

Finderで.mdを選択して実行すると、リンクファイルを同一階層にコピーし、リネームし、mdファイルへ反映させます。

使用は自己責任。というか自分でもハラハラ。

perlでパスのみ全て抜き出して、sort、uniq

パス名からファイルをコピーしてフォルダへ入れる

perlでさっきのパス名を検索(g)して置換

というわけで、フルパスで書いてある前提です。

一度実行すると元に戻りません。バックアップしてから使ってください。

(20160901追記)

パス置換がうまくいかネーゼ、なのでCotEditor経由にしてみた

あ、あとですね、ファイル名に()入ってるとあかんです。入れ子の正規表現書くのめんどくて放置


markdown_Correct4output.scpt

tell application "Finder"

set mySel to selection as alias
-- duplicate mySel
set myMD to POSIX path of mySel
set myMDName to name of mySel
set myMDFolder to folder of mySel
set myMDLinkFolder to (text 1 thru -4 of myMDName) & "_Links"
set myMDLinkFolderPath to ((myMDFolder as text) & myMDLinkFolder as text)
log myMDLinkFolderPath

set myScript to "/usr/bin/perl -e 'open (DATAFILE,\"< " & myMD & "\");while (my $line =<DATAFILE>){chomp($line);while ($line =~m|(?<=\\]\\()(.+?)(?=\\))|g){print \"$&\\n\";}}' | /usr/bin/sort | /usr/bin/uniq"

set myText to (do shell script myScript)
log myText

set delimitersTEMP to AppleScript's text item delimiters
set AppleScript's text item delimiters to return
set myPath to every text item of myText
set AppleScript's text item delimiters to delimitersTEMP

try
make folder at myMDFolder with properties {name:myMDLinkFolder}
end try
set a to 1
set myMDLinkRepName to {}
tell application "CotEditor" to open mySel

repeat with i in myPath

set myDup to duplicate i as POSIX file as alias to folder myMDLinkFolderPath as alias with replacing
set myMDLinkFileName to (text 1 thru -4 of (myMDName as text)) & "_" & a & "." & name extension of myDup
set name of myDup to myMDLinkFileName
set end of myMDLinkRepName to myMDLinkFileName
--
set myRepText to myMDLinkFolder & "/" & myMDLinkFileName
tell front document of application "CotEditor" to replace for i to myRepText with all
-- do shell script "/usr/bin/perl -pi -e 's|" & i & "|" & myMDLinkFolder & "/" & myMDLinkFileName & "|g' " & quoted form of myMD

set a to a + 1
end repeat
end tell



markdown_Correct4output.scpt

tell application "Finder"

set mySel to selection as alias
set myMD to POSIX path of mySel
set myMDName to name of mySel
set myMDFolder to folder of mySel
set myMDLinkFolder to (text 1 thru -4 of myMDName) & "_Links"
set myMDLinkFolderPath to ((myMDFolder as text) & myMDLinkFolder as text)
log myMDLinkFolderPath

set myScript to "/usr/bin/perl -e 'open (DATAFILE,\"< " & myMD & "\");while (my $line =<DATAFILE>){chomp($line);while ($line =~m|(?<=\\]\\()(.+?)(?=\\))|g){print \"$&\\n\";}}' | /usr/bin/sort | /usr/bin/uniq"

set myText to (do shell script myScript)

set delimitersTEMP to AppleScript's text item delimiters
set AppleScript's text item delimiters to return
set myPath to every text item of myText
set AppleScript's text item delimiters to delimitersTEMP

try
make folder at myMDFolder with properties {name:myMDLinkFolder}
end try
set a to 1
set myMDLinkRepName to {}
repeat with i in myPath

set myDup to duplicate i as POSIX file to myMDLinkFolderPath as alias with replacing
set myMDLinkFileName to (text 1 thru -4 of (myMDName as text)) & "_" & a & (the time of (current date)) & "." & name extension of myDup
set name of myDup to myMDLinkFileName
set end of myMDLinkRepName to myMDLinkFileName
do shell script "/usr/bin/perl -pi -e 's|" & i & "|" & myMDLinkFolder & "/" & myMDLinkFileName & "|g' " & quoted form of myMD
log i
set a to a + 1
end repeat
end tell