Existe alguma maneira de criar um link físico no localizador?


8

Existe alguma maneira de criar um link físico no localizador?

Um link físico no terminal seria criado com:

ln /path/to/file /path/to/newpath

Considerando que um link simbólico / alias pode ser feito mantendo o comando e a opção ou

ln -s /path/to/file /path/to/newpath

(embora aparentemente os comportamentos de 'alias' e 'ln' sejam diferentes )

Respostas:


7

Você pode criar um serviço do Automator como este:

insira a descrição da imagem aqui

Isso pega os arquivos selecionados e cria links físicos para eles no diretório em que eles existem. Você pode arrastar e soltar os links no local em que deseja.

Isso funcionará para arquivos com espaços em seus nomes, mas não para arquivos que contenham aspas em seus nomes.

Você pode acessá-lo no menu Finder » Services , no menu de contexto, e pode atribuir a ele um atalho de teclado análogo ao Latalho para aliases (talvez L).


1
Existe uma maneira de executar uma ação que tenha efeito ao arrastar / soltar de uma pasta para outra enquanto mantém pressionada algo como a tecla de opção que fornece a pasta de destino para que o link físico possa ser criado diretamente no novo diretório?
Michael

@ Michael, que provavelmente faria melhor como uma pergunta própria e não como um comentário sobre essa resposta.
Daniel

1
De uma bashperspectiva que deve funcionar em arquivos com aspas no nome. Existe algum motivo relacionado ao Automator para que isso não ocorra? (Será que você teste que ele realmente não funciona com aspas?)
Wildcard

Relacionado, do Unix e Linux Stack Exchange: Como usar argumentos como $ 1 $ 2 ... em um loop for? (Há várias sintaxes mais simples que você pode usar.)
Wildcard

@ Daniel: Eu estendi sua solução com um código refinado para obter "My File Hardlink.txt" em vez de "My File.txt Hardlink", o que dificulta a associação do tipo de arquivo. Por favor, revise-o Obrigado.
porg

2

Não há como fazer isso no próprio Finder.app. No entanto, se seu objetivo é apenas evitar digitar os comandos no Terminal.app, use o Automator.app para criar um fluxo de trabalho para executar os comandos para você.


2

Na verdade, eu queria o termo do link renomeado com a extensão preservada, caso contrário, o localizador não reconheceria o tipo de arquivo.

então eu usei a resposta de Daniel (obrigado por isso) e mudei um pouco

for f in "$@"
 do  
  dir=$(dirname "$f")
  filename=$(basename "$f")
  extension=$([[ "$filename" = *.* ]] && echo ".${filename##*.}" || echo '')
  filename="${filename%.*}"
  ln "$f" "${dir}/$filename Hardlink$extension"
done

EDIT: adicionado o que eu acho que é melhor código de manipulação de extensão - deve ficar em branco se nenhuma extensão estiver presente. Desculpe, eu não sou bom em codificar scripts, então compartilhe as correções que achar necessárias.


Muito bom. Apenas uma ressalva: se você tiver um arquivo que não tem nenhuma extensão, obterá resultados realmente surpreendentes! (E se um dos diretórios contidos tiver um ponto no nome, a surpresa se manifestará de uma forma diferente.) #
Wildcard

1

Sim indiretamente.

O Automator permite criar serviços que executam qualquer script de shell e também pode solicitar um caminho para o destino do link físico (já que provavelmente não estará no mesmo local que o original). Suponho que você também possa usar o local do link como um desktop.

Basta adicionar uma etapa para abrir uma caixa de diálogo para entrar ou escolher o destino e passar para o seu lncomando.


1

Ótima solução fornecida por Daniel, mas sugiro substituir o código de script pelo código abaixo, que preserva o tipo de arquivo.

for f in "$@"
do  
  ln "$f" "Plink-$(basename "$f")"
done

O que significa "não destrutivo para o tipo de arquivo"?
user151019

Eu segui o padrão que o comando "criar alias" do Finder usa. Obviamente, você pode alterar a convenção de nomenclatura da maneira que achar melhor.
Daniel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.