Entendendo o uso do ln

2

Do manual do coreutils, para ln

ln makes links between files. By default, it makes hard links; with the -s option, it makes symbolic (or soft) links. Synopses:

ln [option]... [-T] target linkname
ln [option]... target
ln [option]... target... directory
ln [option]... -t directory target...

• If two file names are given, ln creates a link to the first file from the second.

• If one target is given, ln creates a link to that file in the current directory.

If the --target-directory (-t) option is given, or failing that if the last file is a directory and the --no-target-directory (-T) option is not given, ln creates a link to each target file in the specified directory, using the targets’ names.

O que significa a parte em negrito?

em particular  o que os seguintes significam

  • "falha se o último arquivo for um diretório"
  • "usando os nomes dos destinos"?

Obrigado.

    
por Tim 03.07.2016 / 01:11

2 respostas

7

Isso significa que, se você usar ln /path/to/files/* /path/to/some/directory/ ou ln -t /path/to/some/directory/ /path/to/files/* , um link para cada um dos arquivos correspondentes a /path/to/files/* será criado em /path/to/some/directory/ com nomes idênticos aos originais.

    
por 03.07.2016 / 01:41
5

eu acho link

torna mais claro. Você tem estes formulários:

  1. Em [OPTION] ... [-T] TARGET LINK_NAME (1º formulário)
  2. ln [OPÇÃO] ... TARGET (2ª forma)
  3. ln [OPÇÃO] ... DIRETÓRIO ... (3º formulário)
  4. ln [OPTION] ... -t DIRETÓRIO ALVO ... (4º formulário)

e

-t, --target-directory=DIRECTORY
specify the DIRECTORY in which to create the links
-T, --no-target-directory
treat LINK_NAME as a normal file

-T diz que se você passar dois argumentos, você absolutamente quer dizer o formulário 1 (segundo arg é o link_name), não 3 - em outras palavras, você quer ter certeza de que não passou acidentalmente um diretório como o segundo argumento.

Exemplo:

mkdir output
ln -s /etc/passwd output #OK passwd link goes into output/passwd

vs

mkdir output
ln -sT /etc/passwd output #FAIL; output is already taken and is a directory

Link -t , é o oposto de -T . Ele espera que o que vier depois dele seja um diretório para colocar links, o que permite que você faça coisas como:

list_link_targets | xargs -d '\n' ln -s -t directory

que seria muito mais desafiador para fazer com o 3º formulário.

    
por 03.07.2016 / 01:35

Tags