2014-01-15 59 views
5

我作爲zip文件從Bitbucket.org下載了一個存儲庫,並使用iZip將其解壓縮到我的Mac。 Xcode發現了很多編譯錯誤,因爲zip或unzip沒有正確保存別名。所以我用hg來克隆repo,別名被保存下來,然後Xcode編譯就變得乾淨了。我想在我的文件夾中找到所有別名,並將它們替換爲它們的目標,以便將來的拉鍊將起作用。我做了很多搜索,找不到任何說明如何使用Mac Finder實用程序或bash find命令找到它們的任何內容。我嘗試使用Finder->所有我的文件與搜索 - > kind-> other->別名,它發現約100個別名,但不是我在本地回購,我知道在那裏的。我是否需要以某種方式重建/更新我的所有文件的OSX 10.9.1索引列表? find命令是否有OSX別名文件類型的標誌?我可以將Finder導航到文件夾,然後遞歸搜索文件類型(如果未選中「所有我的文件」,搜索條件選項似乎消失)。另一種替代方法是打印文件以顯示完整Finder列表的內容並顯示「Kind」列,然後按該列進行排序。如何使用Mac Finder列出文件夾中的所有別名

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

看起來像mdfind可能工作。但是它只能找到Finder-> All My Files with search-> kind-> other->別名找到的文件。 Finder將這些文件和我的回購中的文件列爲Kind「別名」。我讀過有3種鏈接:別名,符號鏈接和硬鏈接。 ls命令由mdfind命令找到文件的列表:

[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 

查找調用它們都「別名」,但我認爲他們是不同的。是否有一個mdfind命令行查找第二種別名?

回答

6

在終端:

這應該找到所有aliases(蘋果別名)

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

爲了找到所有symlinks(符號鏈接),你可以使用:

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

只顯示符號鏈接在當前目錄中:

ls -la | grep ^l 

如果要查看符號鏈接的完整路徑:

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

Thanks,l'L'l。我用你的建議修改了我的問題,因爲我的編輯不適合這裏。 – KenM

+0

@KenM啊,你想找到符號鏈接,而不是別名。我知道蘋果公司對他們的截然不同非常清楚,我更新了我的答案:) –

+0

謝謝,-type l工作。 – KenM

2

蘋果已經混爲一談別名和符號鏈接。除了使用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。-la用grep工作得很好。 – KenM

相關問題