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")