我有以下代码:
#bin/sh
symbolic=''
target=''
ls -la | grep "\->" | while read line
do
target=${line##* }
done
它将打印出所有目标文件(符号链接指向的位置)。
现在,我想添加以下约束:
如果我不想使用“ echo | awk”,还有其他方法可以实现吗?
谢谢!
更新和最终解决方案
#bin/sh
find . -maxdepth 1 -type l -xtype d | while read line
do
symlink=$line
target=$(readlink line)
done
答案 0 :(得分:1)
您可以使用find
列出当前目录中的有效符号链接:
find . -maxdepth 1 -type l -xtype f
请注意-xtype
参数的值,该参数指示链接链接到的文件类型。在此示例中,我将f
用于常规文件。如有必要,您可以将其替换为目录的其他查找类型,例如d
。
答案 1 :(得分: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")