To explore the behaviour of `uiop:directory-files` and `uiop:subdirectory`, come up with a test-case and hopefully eventually put together something portable, I've created a sample directory with the following contents: $ ls -RF .: actual-dir/ link-to-dir@ ./actual-dir: file link-to-file@ $ and run the following code: (format t "~{~a~%~}" (list (uiop:subdirectories "./") (uiop:subdirectories (uiop:getcwd)) (uiop:directory-files "actual-dir/") (uiop:directory-files "link-to-dir/") (uiop:directory-files "./") (uiop:directory-files (uiop:getcwd))))'; (stored in another directory) via `cl` from cl-launch as follows: for lisp in abcl allegro ccl clisp cmucl ecl lispworks mkcl sbcl; do echo "===== $lisp ====="; env ABCL=abcl-1.3.3 ALLEGRO=alisp CCL=ccl-1.11 CLISP=clisp-2.49 CMUCL=cmucl-21a ECL=ecl-16.1.2 LISPWORKS=lw-console-7.0 MKCL=mkcl-git SBCL=sbcl-1.3.9 \ cl -l $lisp --require asdf --load ~/foo.lisp done This prints the following for me (modulo tiny whitespace changes): ===== abcl ===== (/home/pipping/test/actual-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/actual-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/actual-dir/file /home/pipping/test/actual-dir/link-to-file) (/home/pipping/test/link-to-dir/file /home/pipping/test/link-to-dir/link-to-file) NIL NIL ===== allegro ===== (/home/pipping/test/link-to-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/link-to-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/actual-dir/link-to-file /home/pipping/test/actual-dir/file) (/home/pipping/test/link-to-dir/link-to-file /home/pipping/test/link-to-dir/file) (/home/pipping/test/link-to-dir) (/home/pipping/test/link-to-dir) ===== ccl ===== (/home/pipping/test/./actual-dir/) (/home/pipping/test/actual-dir/) (/home/pipping/test/actual-dir/file /home/pipping/test/actual-dir/link-to-file) (/home/pipping/test/link-to-dir/file /home/pipping/test/link-to-dir/link-to-file) (/home/pipping/test/./link-to-dir) (/home/pipping/test/link-to-dir) ===== clisp ===== (/home/pipping/test/actual-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/actual-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/actual-dir/file /home/pipping/test/actual-dir/file) (/home/pipping/test/actual-dir/file /home/pipping/test/actual-dir/file) NIL NIL ===== cmucl ===== (actual-dir/ link-to-dir/) (/home/pipping/test/actual-dir/ /home/pipping/test/link-to-dir/) (actual-dir/file actual-dir/link-to-file) (link-to-dir/file link-to-dir/link-to-file) NIL NIL ===== ecl ===== (/home/pipping/test/actual-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/actual-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/actual-dir/file /home/pipping/test/actual-dir/file) (/home/pipping/test/actual-dir/file /home/pipping/test/actual-dir/file) NIL NIL ===== lispworks ===== (/home/pipping/test/link-to-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/link-to-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/actual-dir/link-to-file /home/pipping/test/actual-dir/file) (/home/pipping/test/link-to-dir/link-to-file /home/pipping/test/link-to-dir/file) NIL NIL ===== mkcl ===== (/home/pipping/test/actual-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/actual-dir/ /home/pipping/test/actual-dir/) (/home/pipping/test/actual-dir/file /home/pipping/test/actual-dir/link-to-file) (/home/pipping/test/actual-dir/file /home/pipping/test/actual-dir/link-to-file) (/home/pipping/test/link-to-dir) (/home/pipping/test/link-to-dir) ===== sbcl ===== (/home/pipping/test/actual-dir/ /home/pipping/test/link-to-dir/) (/home/pipping/test/actual-dir/ /home/pipping/test/link-to-dir/) (/home/pipping/test/actual-dir/file /home/pipping/test/actual-dir/link-to-file) (/home/pipping/test/link-to-dir/file /home/pipping/test/link-to-dir/link-to-file) NIL NIL As you can see, - sometimes, a truename will be returned, sometimes not - the link to a directory contained in the current directory will sometimes be listed and sometimes be omitted from directory-files for the current directory - the link actual-dir/link-to-file will sometimes be dereferenced, so that it shows up as another copy of actual-dir/file in directory-files.