ilkkachu apontou uma grande falha na minha resposta e corrigiu-a na dele, então, por favor, dê-lhe o crédito que ele merece. Eu criei outra solução:
#!/bin/bash
for dir in "$@"; do
find "$dir" -type f -name '*png' -exec readlink -f {} \;
done
Exemplo :
$ ll
total 6
-rwxr-xr-x 1 root root 104 Jan 7 14:03 script.sh*
drwxr-xr-x 2 root root 3 Jan 7 04:21 test1/
drwxr-xr-x 2 root root 3 Jan 7 04:21 test2/
drwxr-xr-x 2 root root 3 Jan 7 04:21 test3/
$ for n in {1..3}; do ll "test$n"; done
total 1
-rw-r--r-- 1 root root 0 Jan 7 04:21 testfile.png
total 1
-rw-r--r-- 1 root root 0 Jan 7 04:21 testfile.png
total 1
-rw-r--r-- 1 root root 0 Jan 7 04:21 testfile.png
$ ./script.sh test1 test2/ test3
/root/temp/test1/testfile.png
/root/temp/test2/testfile.png
/root/temp/test3/testfile.png
Solução original :
for file in "${@%/}/"*png; do
echo "$file"
done
O $ {@% /} irá aparar / desativar o fim do seu parâmetro e depois o / fora irá adicioná-lo de volta - ou adicioná-lo a qualquer parâmetro que não tenha um.