如何在一个 shell 命令中创建指向一堆文件的软链接

如何在一个 shell 命令中创建指向一堆文件的软链接

我在 Linux 下使用 bash 作为我的登录 shell。我需要为一些文件创建软链接。这些文件列在一个文本文件中,比如 file_list.txt。file_list.txt 中的每一行都是需要链接的一个目标文件的完整路径。虽然我不知道具体怎么做,但我相信有办法将“cat”“|”和“ln -s”结合起来,在一个 shell 命令中完成这项工作。所以需要你的帮助。

答案1

如果您想要当前目录(或任何一个目录)中的名称,并且文件中的名称都是绝对名称,或者是相对于目标目录正确的相对名称,那么:

ln -s $(<file_list.txt) .

如果您更喜欢使用“cat”,那么:

ln -s $(cat file_list.txt) .

显然,我使用当前目录作为目标。

答案2

你没有说你想链接什么。

使用while不带 的循环cat。如果文件名中有空格,此方法将处理该问题。

while read -r line; do ln -s "$line" target; done < file_list.txt

由于您没有在问题中指定目标名称,因此您必须提供获取目标名称的方法。

答案3

考虑类似的事情(未经测试):

for targ in $(cat file_list);
do
   tfile=$(basename $targ)
   ln -s $targ $tfile
done

请注意,basename将删除任何文件扩展名,如命名(即“.exe”或其他)。这可以修复,但很麻烦。如果您愿意,您可以让基本名称删除任何单个给定的文件扩展名(使用标志-s )。

您可以将其压缩为一行,例如:

$ for targ in $(cat file_list); do tfile=$(basename $targ); ln -s $targ $tfile; done

相关内容