Como posso localizar todos os arquivos 'alias' do Mac OS X e encontrar seus arquivos de destino (apesar de links quebrados)?

3

Acabei de descobrir que estou lidando com links simbólicos em vez de apelidos em si. (Por algum motivo, eles aparecem como aliases no localizador).

Eu tenho uma tonelada de SYMLINKS inexplicados no meu disco rígido. E infelizmente os SYMLINKS não funcionam - ou seja, clicar nele não me leva ao arquivo.

Agora, gostaria de encontrar todos os SYMLINKS no meu disco rígido. Em seguida, para cada um, pesquise pelo arquivo ao qual ele foi vinculado, presumivelmente no mesmo HDD. Em seguida, copie esse arquivo para o mesmo subdiretório do SYMLINK.

Então eu tenho, grosso modo,

FIND all files (in Directory) type=SYMLINK. FOR each one, DO ..
      FIND referentFile (somewhere on the HDD)
      cp referentFile to (Subdirectory that contains the alias).
DONE.

Muito obrigado. PS - Eu estou realmente pensando em voltar ao Linux estritamente sobre isso. Quanto mais simples a configuração, menor a probabilidade de um desastre de dados - lol.

    
por ericlindellnyc 07.12.2017 / 22:56

2 respostas

1

A primeira parte desta pergunta tem uma resposta em AskDifferent :

Aqui está o comando para encontrar aliases:

mdfind kMDItemKind="Alias"

Em geral, você pode usar o mdfind (MetaData Find) para (muito) procurar rapidamente por arquivos. Das man-pages:

The mdfind command consults the central metadata store and returns a list of files that match the given metadata query. The query can be a string or a query expression.

Então, eu não desistiria do OSX ainda. Na verdade, mdfind é uma das coisas que mais sinto falta do OSX quando estou no Linux.

Infelizmente, a segunda parte desta questão foi surpreendentemente mais difícil de resolver. Encontrei algumas postagens relevantes do StackExchange:

Isso me levou a várias soluções possíveis.

Meu favorito veio da postagem do blog Faça o acompanhamento do terminal Aliases como links simbólicos . Faz referência a um pequeno programa C de código aberto chamado getTrueName.c . Aqui está o código fonte:

// getTrueName.c
// 
// DESCRIPTION
//   Resolve HFS and HFS+ aliased files (and soft links), and return the
//   name of the "Original" or actual file. Directories have a "/"
//   appended. The error number returned is 255 on error, 0 if the file
//   was an alias, or 1 if the argument given was not an alias
// 
// BUILD INSTRUCTIONS
//   gcc-3.3 -o getTrueName -framework Carbon getTrueName.c 
//
//     Note: gcc version 4 reports the following warning
//     warning: pointer targets in passing argument 1 of 'FSPathMakeRef'
//       differ in signedness
//
// COPYRIGHT AND LICENSE
//   Copyright 2005 by Thos Davis. All rights reserved.
//   This program is free software; you can redistribute it and/or
//   modify it under the terms of the GNU General Public License as
//   published by the Free Software Foundation; either version 2 of the
//   License, or (at your option) any later version.
//
//   This program is distributed in the hope that it will be useful, but
//   WITHOUT ANY WARRANTY; without even the implied warranty of
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
//   General Public License for more details.
//
//   You should have received a copy of the GNU General Public
//   License along with this program; if not, write to the Free
//   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
//   MA 02111-1307 USA


#include <Carbon/Carbon.h> 
#define MAX_PATH_SIZE 1024
#define CHECK(rc,check_value) if ((check_value) != noErr) exit((rc))

int main ( int argc, char * argv[] ) 
  { 
    FSRef               fsRef; 
    Boolean             targetIsFolder; 
    Boolean             wasAliased; 
    UInt8               targetPath[MAX_PATH_SIZE+1]; 
    char *              marker;

    // if there are no arguments, go away
    if (argc < 2 ) exit(255); 

    CHECK( 255,
      FSPathMakeRef( argv[1], &fsRef, NULL ));

    CHECK( 1,
      FSResolveAliasFile( &fsRef, TRUE, &targetIsFolder, &wasAliased));

    CHECK( 255,
      FSRefMakePath( &fsRef, targetPath, MAX_PATH_SIZE)); 

    marker = targetIsFolder ? "/" : "" ;
    printf( "%s%s\n", targetPath, marker ); 

    exit( 1 - wasAliased );
  }

Eu baixei este código fonte e o compilamos usando o seguinte comando:

gcc -o getTrueName -framework Carbon getTrueName.c

Claro que queria testá-lo. Para evitar deixar o terminal, criei um alias usando os seguintes comandos:

user@host:~$ FULL_PATH_TO_TARGET_FILE=/tmp/alias-target

user@host:~$ echo "testing" > "${FULL_PATH_TO_TARGET_FILE}"

user@host:~$ osascript \
-e 'tell application "Finder"' \
-e "make new alias to file (posix file \"${FULL_PATH_TO_TARGET_FILE}\") at desktop" \
-e 'end tell'

alias file alias-target of folder Desktop of folder user of folder Users of disk MacHD

Em seguida, verifiquei o Alias usando o programa getTrueName :

user@host:~$ ./getTrueName ~/Desktop/alias-target

/tmp/alias-target

Vitória!

A postagem no blog Truques do Mac OS X estúpidos: Resolvendo aliases também parece que pode ter uma solução. Ele continha o seguinte script Perl:

#!/usr/local/bin/perl
use Mac::Errors;
use Mac::Files;
use Mac::Resources;

my $path = '/Users/pudge/Desktop/some alias';
my $res  = FSpOpenResFile($path, 0) or die $Mac::Errors::MacError;
# get resource by index; get first "alis" resource
my $alis = GetIndResource('alis', 1) or die $Mac::Errors::MacError;
my $link = ResolveAlias($alis);
print $link;

Eu não tinha as bibliotecas necessárias e não queria instalar um monte de coisas, então desisti dessa.

Também encontrei as mac_alias , que pareciam promissoras. Passei 5 ou 10 minutos mexendo nele, mas não consegui descobrir como resolver um destino de alias.

    
por 08.12.2017 / 01:01
0

Eu poderia ter descoberto como localizar arquivos de referência para links simbólicos que estão quebrados.

[Btw, eu sou o OP - não encontrei login original, então me inscrevi novamente.]

Use um localizador de arquivos duplicado como o dupeGuru. Defina para   o Pesquisar diretório / drives inteiros contendo links simbólicos e referentes.   o Misture arquivos de diferentes tipos.   o Correspondências inexatas são aceitáveis (ou seja, nível de certeza em torno de 80%).   o Corresponde apenas ao nome do arquivo (não ao conteúdo ou ao diretório inteiro).

Isso gerará muitos falsos positivos, mas incluirá links simbólicos e seus referentes (quebrados ou intactos).

    
por 27.12.2017 / 18:09

Tags