2016-11-08 8 views
2

私は現在、Cocoa-Applicationフォーマットに移植したC++コマンドラインツールを移植しています。これは、私が最近作ったいくつかのユーティリティやアプレットをより使いやすくするためです。問題のツールは、特定のディレクトリとそのすべてのサブディレクトリを検索して、実行の残りの部分について参照する既存のファイルのリストを作成する必要があります。`find <dir>タイプ-f` Swift-Cocoaに相当する?

私はこのコマンドを実行したbashスクリプトを呼び出すことで、これを簡単に実行できました:files=$(find <dir> type -f); echo "$files" > ./<reference file>。今私はそのコマンドに相当するものがあるかどうか疑問に思っています。同じことを素早く行い、ファイルをバンドルに保存したり、スクリプトを "Resources"ディレクトリから実行して、物事を畳み込む必要がないようにします設定した場所にバイナリをインストールし、Swiftを使ってそのバイナリを呼び出してスクリプトを呼び出します。 可能な限りシステムコールでSwiftの内部から直接コマンドを実行できるようにすることもできます。

BTW関連性がある場合は、XCode 8.0でSwift 3.0を使用しています。ありがとう!

+0

を - コード・レベルを質問がそこにあるのが最善です。その移行が拒否された場合は、フラグを立てて、コードベースではなくスクリプトベースに変更できるかどうかを確認できます。 – bmike

+0

@bmike C++の話を除いて、私はこれがStackOverflowとどういった関係があるのか​​は分かりません。AskDefferentは、Appleシステム専用の言語とコンパイルできる言語の両方について見ているので、スクリプトとして直接実行することもできます。 –

+0

ここでどうなるか見てみましょう。それは、Ask Differentでいくつかの編集が必要です。ここでも同じことが必要かもしれません。私はここのモッズが見て、私たちの両方を導くことができることを確認します。 – bmike

答えて

1

Swiftでサブプロセスを実行する方法はクラスNSTaskであり、シェルスクリプトはバインド内のリソースにあり、NSBundleを使用してそのパスを見つけることができます。

しかし、より良いあなたがこれに似た何かを行うことができます

+0

私はSwiftにとって非常に新しく、私が持っている唯一のココア体験は、かなり古いバージョンのOS X(〜10.5)だから、ボタンクリックが発生したときにこれらのことをどうやって行うかについて非常に感謝しています。また、bashで同じアクションを実行するよりも実質的に多くのコードが必要な場合は、Swiftの中からbashスクリプトを呼び出す方がはるかに好きです。 –

+0

これは2つの異なる質問です - ボタンのクリックはOSX 10.5に似ていて、Obj C/Swiftではそうです。 scrptビットを書くのはあまりコードではない – Mark

+0

AppleのXCodeのドキュメントの例でもエラーが多く、XCode Playgroundにドラッグアンドドロップすると実行が拒否されるため、 (もちろん、プレースホルダをテスト変数に置き換える)。だから私は単に私を助けてくれるのではないかと心配しています。私はボタンクリックをNSView関連のアクションに非常に簡単にマッピングできますが、ボタンをクリックしてすべてのサブディレクトリとファイルを列挙する必要があります。まだ動作します。 –

0

ファイルシステムを通じてFGOするNSFileManagerを使用してスウィフトでそのコマンドを書き換える:私はこれにSOを取得するつもりです

import Foundation 

for arg in CommandLine.arguments.dropFirst() { 
    let fileManager = FileManager() 
    let en=fileManager.enumerator(atPath: arg) 
    while let fileName = en?.nextObject() as? String { 
//  if fileName.hasSuffix("txt") { // if you want to test for file extension 
      print(arg+"/"+fileName) 
    // } 
    } 
} 
関連する問題