Prueba esto:
find /data/my_project -type f -name '*.php' -exec \
bash -c 'grep -q AAA "$1" && ! grep -q BBB "$1" && echo "$1"' -- {} \; \
> /tmp/class_list.txt
Используйте тест -L (без readlink ), чтобы проверить, является ли файл символической ссылкой.
if [ -L hellolink2 ]
Используйте realpath, чтобы получить абсолютный путь символической ссылки на каталог.
$ realpath hellolink2
/home/ralph/subdir1/hellolink
Что бы это ни стоило... следуя предложениям в комментариях выше, я переписал код, который дает мне файл, на который указывает ссылка, даже если это другая ссылка, плюс несколько строк для проверки:
#!/bin/bash
function nextlinked ()
{
if [ -h "$1" ]; then # we have a link
linked="$(readlink "$1")"
[ "${linked:0:1}" == / ] && echo "$linked" || echo "${1%/*}"/"$linked"
fi
}
header=""
add=" "
count=0
find / -print0 | while read -rd '' FILENAME ; do
(( count++ ))
if [ -h "$FILENAME" ] ; then # is this a link?
filename="$FILENAME"
printf "%6d " $count ; ls -ld "$filename" 2>&1
filename="$(nextlinked "$filename" )"
while [ "$filename" ] ; do
header=$header$add
printf "%6d %s" $count "$header" ; ls -ld "$filename" 2>&1
filename="$(nextlinked "$filename")"
done
header=""
fi
done
Вопрос остается в силе. :Существует ли в Linux команда, выполняющая работу функции nextlinked?