我从Bitbucket.org下载了一个存储库作为zip文件,然后使用iZip将其解压缩到我的Mac上。 Xcode发现了许多编译错误,因为zip或unzip没有正确保留别名。所以我使用hg克隆了repo,保留了别名,然后Xcode编译就干净了。我想在我的文件夹中找到所有别名并将其替换为目标,以便将来的拉链工作。我已经做了很多搜索,找不到任何说明如何使用Mac Finder实用程序或bash find命令找到它们。我已经尝试使用Finder->所有我的文件与search-> kind-> other->别名,它找到大约100个别名,但不是我知道的本地仓库中的别名。我是否需要以某种方式重建/更新所有文件的OSX 10.9.1索引列表? find命令是否有OSX别名文件类型的标志?我可以将Finder导航到文件夹,然后递归搜索文件类型(如果未选择“所有文件”,搜索条件选项似乎会消失)。另一种方法是打印以显示完整Finder列表的内容,并显示“Kind”列,然后按此排序。
mdfind "kMDItemKind == 'Alias'" -onlyin /path/of/repo
似乎mdfind可能有效。但它只找到Finder->所有我的文件与搜索 - > kind->其他 - >别名找到相同的文件。那些文件和我的回购中的文件被Finder列为Kind“Alias”。我读过有3种链接:别名,符号链接和硬链接。 ls命令列出的mdfind命令找到的文件是:
-rw-r--r--@ 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称他们为“Alias”,但我认为他们是不同的。是否有mdfind命令行找到第二种类型的别名?
答案 0 :(得分:6)
在终点站:
这应该找到所有aliases
(Apple别名)
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
答案 1 :(得分: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];
}