检索`ls -la`的符号和目标链接[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我有以下代码:

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

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

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

  1. 将符号链接文件名(前面的单词 - >)解析为var“symbolic”。 (我想把它当作字符串的第3个字)
  2. 仅解析指向有效/现有位置的符号链接。

如果我不想使用“echo | awk”,还有其他方法可以实现吗?

谢谢!

更新和最终解决方案

  #bin/sh
  find . -maxdepth 1 -type l -xtype d | while read line
  do
      symlink=$line
      target=$(readlink line)
  done
linux bash shell unix symlink
2个回答
1
投票

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

find . -maxdepth 1 -type l -xtype f

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


0
投票

此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")
© www.soinside.com 2019 - 2024. All rights reserved.