diff --git a/lib/spack/spack/cmd/license.py b/lib/spack/spack/cmd/license.py
index df208d8bbe73d8d2b9d7488d5bdb191ff7add26d..e3349c505dbc01f8ae3a043fab81a22e7b2fb5df 100644
--- a/lib/spack/spack/cmd/license.py
+++ b/lib/spack/spack/cmd/license.py
@@ -67,10 +67,14 @@
 
 def _all_spack_files(root=spack.paths.prefix):
     """Generates root-relative paths of all files in the spack repository."""
+    visited = set()
     for cur_root, folders, files in os.walk(root):
         for filename in files:
-            path = os.path.join(cur_root, filename)
-            yield os.path.relpath(path, root)
+            path = os.path.realpath(os.path.join(cur_root, filename))
+
+            if path not in visited:
+                yield os.path.relpath(path, root)
+                visited.add(path)
 
 
 def _licensed_files(root=spack.paths.prefix):
@@ -81,7 +85,7 @@ def _licensed_files(root=spack.paths.prefix):
 
 def list_files(args):
     """list files in spack that should have license headers"""
-    for relpath in _licensed_files():
+    for relpath in sorted(_licensed_files()):
         print(os.path.join(spack.paths.spack_root, relpath))