Linux 检索'ls-la'的符号和目标链接`

Linux 检索'ls-la'的符号和目标链接`,linux,bash,shell,unix,symlink,Linux,Bash,Shell,Unix,Symlink,我有以下代码: #bin/sh symbolic='' target='' ls -la | grep "\->" | while read line do target=${line##* } done 它将打印符号链接指向的所有目标文件 现在,我想添加以下约束: 将->之前的单词的符号链接文件名解析为var symbolic。我想把它当作字符串的最后三个字 仅解析指向有效/现有位置的符号链接。 如果我不想使用echo | awk,还有其他方法可以实

我有以下代码:

  #bin/sh
  symbolic=''
  target=''
  ls -la | grep "\->" | while read line
  do
      target=${line##* }
  done
它将打印符号链接指向的所有目标文件

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

将->之前的单词的符号链接文件名解析为var symbolic。我想把它当作字符串的最后三个字 仅解析指向有效/现有位置的符号链接。 如果我不想使用echo | awk,还有其他方法可以实现吗

谢谢

更新和最终解决方案

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

find . -maxdepth 1 -type l -xtype f

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

此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 target\n' "$file"
    fi
done
如果需要获取符号链接的目标,则readlink命令会在 许多系统:

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

请参阅。除了解析ls输出的常见问题外,上面的代码在包含名称为X->Y的文件的目录上也会失败。
target=$(readlink -- "$file")