我在 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