检索"ls -la"的符号和目标链接



我有以下代码:

#bin/sh
symbolic=''
target=''
ls -la | grep "->" | while read line
do
target=${line##* }
done

这将打印出所有目标文件(符号链接指向的位置(。

现在,我想添加以下约束:

  1. 符号链接文件名(-> 之前的单词(解析为 var "symbolic"。(我想把它当作字符串的倒数第三个字(
  2. 仅解析指向有效/现有位置的符号链接。

如果我不想使用"回声 |awk",还有其他方法可以实现这一点吗?

谢谢!

更新和最终解决方案

#bin/sh
find . -maxdepth 1 -type l -xtype d | while read line
do
symlink=$line
target=$(readlink line)
done

您可以使用find列出当前目录中的有效符号链接:

find . -maxdepth 1 -type l -xtype f

请注意-xtype参数的值,该值指示链接链接到的文件类型。在此示例中,我将f用于常规文件。如果需要,您可以将其替换为另一种查找类型,例如目录的d

此 Bash 代码将列出当前目录中引用现有目标的所有符号链接:

shopt -s nullglob   # Handle empty directories
shopt -s dotglob    # Handle files whose names start with '.'
for file in * ; do
if [[ -L $file && -e $file ]] ; then
printf '"%s" is a symlink to an existing targetn' "$file"
fi
done

如果需要获取符号链接的目标,readlink命令会在 许多系统:

target=$(readlink -- "$file")

相关内容

最新更新