2017-11-29 2 views
1

マウントされたボリュームをスキャンする方法(サーバーに接続されており、ワークステーションにafp://を介してマウントされています)を特定し、パス、ファイル名、アセットIDをcsvファイルに出力します。アセットIDは、ファイル名の最後の10桁です(例:afilename_1234567890.mov)一部のファイルにはアセットID(無視されます)があり、一部のファイルには複数の "。" (たとえば、afilename_videofile_23.98_prores_1234567890.mov)。私は必要なボリュームを得ることができます(時間の少ないマシンのバックアップドライブ)が、ファイルをスキャンしようとすると面倒です。私は様々な例を見てApple FileManagerのドキュメントを研究しましたが、具体的なものはありません。特定のファイルタイプを見つけるためにマウントされたボリュームをトラバースする

私は、必要な行為を行うために次のルーチンを使用します。let enumerator = fileManager.enumerator(atPath:url.path)!、列挙子は常に空白です。

私は間違った仮定をしていますか、私は間違いなく何かを欠いています。

func FindFilesWithAssetIDs() { 

    // Find all the mounted volumes 
    let keys: [URLResourceKey] = [] 
    let volumes = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: keys, options: [])! 

    var count = 0 
    var volumeCount = volumes.count 
    var volumeItem = 0 

    let filterExtensions = ["mxf", "mov", "mp4", "scc", "cap", "srt", "txt", "rtf", "wav", "mp3", "m2v", "aif"] 

    // Scan all the mounted volumes, one at a time 
    for url in volumes { 

     let components = url.pathComponents 

     if components.count > 1 && components[1] == "Volumes" { 
      if components[2] == "Time Machine Backup" { continue } // Check if the volume is the staff backup disk. If it is, move on to the next volume 

      guard let volumeTypeKey = try? url.resourceValues(forKeys: [.volumeIsLocalKey]) else { return } // Make sure we are scanning the volumes and not any local folders like /private 

      let volumeType: Bool = volumeTypeKey.volumeIsLocal! 

      if volumeType == false { 
       let fileManager = FileManager.default 
       let enumerator = fileManager.enumerator(atPath: url.path)! 

       while let element = enumerator.nextObject() as? String { 
        if element.hasSuffix("mxf") || element.hasSuffix("mov") { // a test. I would much rather use a filterExtension method or a switch statement 
         // do something 
         count += 1 
        } 
       } 

       NSLog(url.path, " ", String(count)) 
       //     NSLog(url.path) 
      } 
     } 

     volumeItem += 1 
    } 
} 

ご協力いただければ幸いです。

+0

Duh !! ...「App Sandbox」スイッチが何らかの理由でオンになっていたため、コードがネットワークボリュームにアクセスできなくなりました。ですから、 "element"変数を与えられた場合、 "。"で始まるファイルをどのようにフィルタリングできますか? (見えないファイル)、 "filterExtensions"変数を使用してファイルをフィルタリングするより良い方法はありますか? – user1462486

+0

あなたの以前の質問に対する回答を受け入れると、私はもっと詳細な回答を与えることが大いに奨励されます:-) –

答えて

0

AppleScriptを使用してボリュームをスキャンしようとしましたが、存在していてもSpotlightで見つからなかったファイルがいくつかありました。マウントされたすべてのボリューム上でSpotlightデータベースを再構築しましたが、運はありません。エラーのために、私はSwiftに頼った。

私は一日の終わりに、スウィフト・アンド・アップルスクリプトとはるかに遠いです。私はいくつかのコードを変更しました()element = enumerator.nextObject()を?Stringになりましたが、element = enumerator.nextObject()は?URLとなりました。コールなど。

私はこの問題を解決したので、この問題をクローズしています。

関連する問題