2014-01-15 11 views
5

Bitbucket.orgからzipファイルとしてリポジトリをダウンロードし、MacにiZipを使用して解凍しました。 zipまたはunzipがエイリアスを適切に保存しなかったため、Xcodeは多くのコンパイルエラーを検出しました。だから私はhgを使ってリポジトリを複製し、エイリアスは保存され、Xcodeのコンパイルはきれいだった。私は私のフォルダ内のすべてのエイリアスを見つけて、それらのターゲットで置き換えて、将来のzipが機能するようにしたいと思います。私はたくさんの検索をしてきましたが、Mac Finderユーティリティやbash findコマンドでどのように見つけられるかを見つけることができません。 Finder-> All My Filesを検索 - > kind-> other-> aliasで試してみたところ、約100のエイリアスが見つかりましたが、自分のローカルリポジトリにあるものは見つかりませんでした。どうにか私のすべてのファイルのOSX 10.9.1インデックスリストを再構築/更新する必要がありますか? findコマンドにOSXエイリアスファイルタイプのフラグがありますか? Finderをフォルダに移動し、ファイルタイプを再帰的に検索することはできます(すべての[My Files]が選択されていないと、検索基準オプションが消えるようです)。もう1つの選択肢は、Finderリスト全体の内容を「種類」の列に表示し、それを並べ替えて印刷することです。Mac Finderを使用してフォルダ内のすべてのエイリアスを一覧表示する方法

mdfind "kMDItemKind == 'Alias'" -onlyin /path/of/repo 

mdfindのように見えるかもしれません。しかし、検索 - > kind-> other-> aliasが見つかったFinder-> All My Filesと同じファイルしか検索されません。これらのファイルと私のレポにあるファイルは、FinderによってKind "Alias"としてリストされます。私はリンクの3種類があることを読んだ:エイリアス、シンボリックリンク、およびハードリンク。 mdfindコマンドで見つかったファイルのためのlsコマンドによってリストは次のとおりです。

[email protected] 1 kenm staff 45100 Dec 25 2012 GTLDrive.h 

私が発見したいファイルのlsコマンドによってリストは次のとおりです。

lrwxr-xr-x 1 kenm staff 24 Jan 14 21:38 Headers -> ./Versions/A/Headers 

Finderはそれらの両方を呼び出します"別名"は違うと思っています。 2番目のタイプのエイリアスを検出するmdfindコマンドラインはありますか?ターミナルで

答えて

6

これは、すべてのsymlinks(シンボリックリンク)を見つけるために

mdfind "kMDItemKind == 'Alias'" -onlyin /path/of/your/repo 

すべてaliases(アップルの別名)を見つける必要があります使用することができます。

ls -lR /path/of/your/repo | grep ^l 

のみシンボリックリンクを表示するように現在のディレクトリ:

ls -la | grep ^l 

あなたはシンボリックリンクの完全なパスを表示する場合:

find /path/of/your/repo -type l 
+0

ありがとう、l'l'l。上記の私の編集はここでは合わないので、あなたの提案で私の質問を修正しました。 – KenM

+0

@KenMああ、別名ではなく、シンボリックリンクを探したい。私はAppleが彼らがはっきりと異なっていることを非常に明確にしていないことを知っている。私は私の答えを更新しました:) –

+0

ありがとう、タイプlは働いた。 – KenM

2

Appleはエイリアスとシンボリックリンクを融合しました。私はlsを使う以外の方法でコマンドラインでこれを行う方法を知らない。

ls -la | grep ">" 

次のObjective-C関数は、ターゲットを検出します。

#include <sys/stat.h> 

NSURL *targetOfAlias(NSURL *url) { 
    CFErrorRef *errorRef = NULL; 
    CFDataRef bookmark = CFURLCreateBookmarkDataFromFile (NULL, (__bridge CFURLRef)url, errorRef); 
    if (bookmark == nil) return nil; 
    CFURLRef resolvedUrl = CFURLCreateByResolvingBookmarkData (NULL, bookmark, kCFBookmarkResolutionWithoutUIMask, NULL, NULL, NO, errorRef); 
    return CFBridgingRelease(resolvedUrl); 
} 

NSString *getTarget(NSString *fPath) { 
    NSString *resolvedPath = nil; 
    // Use lstat to determine if the file is a symlink 
    struct stat fileInfo; 
    NSFileManager *fileManager = [NSFileManager new]; 
    if (lstat([fileManager fileSystemRepresentationWithPath:fPath], &fileInfo) < 0) 
     return nil; 
    if (S_ISLNK(fileInfo.st_mode)) { 
     // Resolve the symlink component in the path 
     NSError *error = nil; 
     resolvedPath = [fileManager destinationOfSymbolicLinkAtPath:fPath error:&error]; 
     if (resolvedPath == nil) { 
      NSAlert *alert = [NSAlert alertWithError:error]; 
      [alert runModal]; 
      return nil; 
     } 
     if ([resolvedPath isAbsolutePath]) 
      return resolvedPath; 
     else 
      return [[fPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:resolvedPath]; 
    } 

    // Resolve alias 
    NSURL *resolvedUrl = targetOfAlias([NSURL fileURLWithPath:fPath]); 
    return [resolvedUrl path]; 
} 
+0

'ls -la | grep ">" 'は'> 'を含むファイル名も検索します。 –

+0

本当に誰かがファイル名にリダイレクション記号を使用するのに馬鹿げていた場合、 'ls -la | grep "\ - >" ' – Milliways

+0

ありがとう、Milliways。grepを使った-laはうまくいった。 – KenM

関連する問題