理解ln的用法

Tim*_*Tim 4 ln

来自 coreutils 的手册,对于 ln

ln 在文件之间建立链接。默认情况下,它是硬链接;使用 -s 选项,它可以创建符号(或软)链接。概要:

ln [option]... [-T] target linkname
ln [option]... target
ln [option]... target... directory
ln [option]... -t directory target...
Run Code Online (Sandbox Code Playgroud)

• 如果给出了两个文件名,ln 会从第二个文件创建一个到第一个文件的链接。

• 如果给定了一个目标,ln 会在当前目录中创建一个指向该文件的链接。

如果给出了--target-directory (-t) 选项,或者如果最后一个文件是一个目录并且没有给出--no-target-directory (-T) 选项,则 ln 会创建一个指向每个文件的链接指定目录中的目标文件,使用目标的名称。

粗体部分是什么意思?

特别是以下是什么意思

  • “如果最后一个文件是目录,则失败”
  • “使用目标的名字”?

谢谢。

Dop*_*oti 8

这意味着如果您使用ln /path/to/files/* /path/to/some/directory/ln -t /path/to/some/directory/ /path/to/files/*/path/to/files/*将创建指向每个匹配文件的链接,其/path/to/some/directory/名称与原始文件相同。

  • 本质上它是“其他”。*如果给出了 -t 选项,或者失败了 if...* 表示 *如果给出了 -t 选项,否则 if...* (2认同)

PSk*_*cik 5

我认为 http://linux.die.net/man/1/ln

使它更清楚。你有这些表格:

  1. ln [OPTION]... [-T] TARGET LINK_NAME(第一种形式)
  2. ln [选项]... 目标(第二种形式)
  3. ln [选项]...目标...目录(第 3 种形式)
  4. ln [选项]... -t 目录目标...(第 4 种形式)

-t, --target-directory=DIRECTORY
specify the DIRECTORY in which to create the links
-T, --no-target-directory
treat LINK_NAME as a normal file
Run Code Online (Sandbox Code Playgroud)

-T 说如果你传递两个参数,你绝对是指形式 1(第二个参数是链接名称),而不是 3——换句话说,你要确保你没有意外地将目录作为第二个参数传递。

例子:

mkdir output
ln -s /etc/passwd output #OK passwd link goes into output/passwd
Run Code Online (Sandbox Code Playgroud)

对比

mkdir output
ln -sT /etc/passwd output #FAIL; output is already taken and is a directory
Run Code Online (Sandbox Code Playgroud)

链接-t,是相反的-T。它期望它后面的任何内容都是一个放置链接的目录,这允许您执行以下操作:

list_link_targets | xargs -d '\n' ln -s -t directory
Run Code Online (Sandbox Code Playgroud)

这对于第 3 种形式将更具挑战性。