2017-08-18 1 views
0

Je voudrais exécuter une commande shell sur de nombreux fichiers qui doivent correspondre à une regex de nom de fichier donnée. J'ai trouvé cet extrait de code qui exécute une commande shell avec des arguments:Exécuter une commande shell avec un motif dans Swift

func shell(_ arguments: [String] = []) -> String { 

    let task = Process() 
    task.launchPath = "/usr/bin/env" 
    task.arguments = arguments 

    let pipe = Pipe() 
    task.standardOutput = pipe 
    task.launch() 

    let data = pipe.fileHandleForReading.readDataToEndOfFile() 
    let output = String(data: data, encoding: .utf8) ?? "unknown" 

    return output 
} 

Il fonctionne très bien, mais il ne résout pas les paramètres:

shell(["ls", "~/Desktop/*.txt"]) 

ne résout pas le * à tous txt fichiers, essaie de travailler uniquement sur un fichier appelé *.txt. Y at-il une option que je dois définir Process?

Merci d'avance pour votre aide!

Répondre

1

Je viens de trouver la réponse! La résolution de * et d'autres modèles est effectuée par le shell, Process exécute seulement une commande donnée. Donc, la solution est de créer un shell et d'exécuter la commande là-dedans: (fera un peu de nettoyage dans le code, mais cela fonctionne)

shell(["bash", "-c", "ls ~/Desktop/*.txt"])