AppleScript: como eu armazeno os nomes de caminho das pastas em uma matriz, substituindo espaços por “\”?

0

Eu tenho uma pasta e dentro dessa pasta há um monte de subpastas. Usando o AppleScript, desejo armazenar os nomes de caminho dessas subpastas em uma matriz.

Aqui está o meu problema: cada nome de caminho contendo "   " (espaços), eu quero substituir por nomes de caminho contendo notação amigável " " do UNIX (barra invertida seguida por um espaço; como em /my/fancy\ path/ ). / p>

Como você pode ver, estou apenas na metade do meu objetivo aqui. Eu passei uma boa noite de tentativas laboriosas, brincando com replace_chars sub-rotinas, do shell script -com- sed combos e quem sabe o quê. Sem dados.

tell application "Finder"

    set myRepos to name of folders of folder ("/Users/hced/Dropbox/GitHub/" as POSIX file)
    --> {"320andup", "Baseline.js (jQuery & vanilla JS version)", "Bootstrap (HTML, CSS, and JS toolkit from Twitter)", "Chirp.js (Tweets on your website, simply)", "Coordino"}

end tell

Editar: um exemplo de caminho válido seria /Users/hced/Dropbox/GitHub/A\ folder\ named\ with\ spaces

    
por Henrik 14.11.2012 / 01:16

3 respostas

2

Ao ler sua pergunta, não tenho certeza se você é capaz de usar nomes de caminho citados em vez de escapar dos espaços ...

tell application "Finder"
        set folderGitHub to folder ("/Users/hced/Dropbox/GitHub/" as POSIX file)

        set listFolders to (every folder in folderGitHub as alias list)
end tell

set listPosixPathsQuoted to {}

repeat with aliasFolder in listFolders
        set listPosixPathsQuoted to listPosixPathsQuoted & {quoted form of POSIX path of aliasFolder}
end repeat
    
por 18.11.2012 / 00:11
1

Isso deve ser feito:

tell application "Finder"
    set myRepos to name of folders of folder ("/Users/hced/Dropbox/GitHub/" as POSIX file)
end tell

repeat with theIndex from 1 to number of items in myRepos
    set item theIndex in myRepos to replace_chars(item theIndex in myRepos, " ", "\ ")
end repeat

return myRepos

on replace_chars(this_text, search_string, replacement_string)
    set AppleScript's text item delimiters to the search_string
    set the item_list to every text item of this_text
    set AppleScript's text item delimiters to the replacement_string
    set this_text to the item_list as string
    set AppleScript's text item delimiters to ""
    return this_text
end replace_chars

Isso leva os nomes das pastas, que você já tem, e faz um loop sobre cada item na lista, substituindo cada caractere de espaço por \ . Observe que a barra invertida precisa ser escapada e que o AppleScript Editor exibe as cadeias como incluindo a barra invertida dupla. No entanto, você pode verificar se eles escaparam corretamente com uma única barra invertida, fazendo set the clipboard to item 2 of myRepos e colando o texto resultante em um editor de texto - é apenas uma peculiaridade do AppleScript Editor.

A função replace_chars é uma clichê padrão. Copiei da automação do Mac OS X .

    
por 14.11.2012 / 02:14
0

O manipulador da Trash Man postado no MacScripter irá escapar de todos os personagens problemáticos ...

set myFolder to quoted form of "/Users/hced/Dropbox/GitHub/"

    set theFolders to every paragraph of (do shell script "find " & myFolder & " -type d -depth 1 ")
    set escFolders to {}

    repeat with aFolder in theFolders
        set end of escFolders to escape_string(aFolder as text)
    end repeat

    on escape_string(input_string)
    set output_string to ""
    set escapable_characters to " !#^$%&*?()={}[]''~|;<>\"\"
    repeat with chr in input_string
        if (escapable_characters contains chr) then
            set output_string to output_string & "\" -- This actually adds ONE \ to the string.
        else if (chr is equal to "/") then
            set output_string to output_string & ":" -- Swap file system delimiters
        end if
        set output_string to output_string & chr
    end repeat
    return output_string as text
end escape_string
    
por 14.11.2012 / 03:06