从 coreutils 手册中,对于ln
ln 在文件之间建立链接。默认情况下,它会建立硬链接;使用 -s 选项,它会创建符号(或软)链接。简介:
ln [option]... [-T] target linkname ln [option]... target ln [option]... target... directory ln [option]... -t directory target...
• 如果给出两个文件名,ln 将创建从第二个文件到第一个文件的链接。
• 如果给定一个目标,ln 将在当前目录中创建指向该文件的链接。
•如果给出了 --target-directory (-t) 选项,或者如果最后一个文件是目录并且未给出 --no-target-directory (-T) 选项,则 ln 会创建到每个目标的链接使用目标名称将文件保存在指定目录中。
粗体部分是什么意思?
特别是以下内容是什么意思
- “如果最后一个文件是目录则失败”
- “使用目标的名字”?
谢谢。
答案1
这意味着如果您选择ln /path/to/files/* /path/to/some/directory/
或,则会创建ln -t /path/to/some/directory/ /path/to/files/*
指向每个匹配文件的链接,其名称与原始文件的名称相同。/path/to/files/*
/path/to/some/directory/
答案2
我认为 http://linux.die.net/man/1/ln
使它更清楚。您有以下表格:
- ln [选项]... [-T] TARGET LINK_NAME(第一种形式)
- ln [选项]...目标(第二种形式)
- ln [选项]...目标...目录(第三种形式)
- ln [选项]... -t 目录目标...(第四种形式)
和
-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
表示如果您传递两个参数,则绝对意味着形式 1(第二个参数是 link_name),而不是 3——换句话说,您要确保没有意外地传递目录作为第二个参数。
例子:
mkdir output
ln -s /etc/passwd output #OK passwd link goes into output/passwd
对比
mkdir output
ln -sT /etc/passwd output #FAIL; output is already taken and is a directory
链接-t
,是相反的-T
。它期望后面的任何内容都是一个可以放置链接的目录,这允许您执行以下操作:
list_link_targets | xargs -d '\n' ln -s -t directory
这对于第三种形式来说更具挑战性。