File: ziptools/ziptools/docetc/symlinks/demo-os-walk-yield-names.txt
------------------------------------------------------------------------------------
# what does os.walk yield when links are present?
/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks$ ls -l test1
drwxr-xr-x 3 blue wheel 102 Jan 28 17:40 dir
lrwxr-xr-x 1 blue wheel 3 Feb 9 06:43 dirlink -> dir
-rw-r--r-- 1 blue wheel 5 Jan 28 17:32 file
lrwxr-xr-x 1 blue wheel 4 Feb 9 06:43 filelink -> file
lrwxr-xr-x 1 blue wheel 14 Feb 9 06:43 nestedfilelink -> dir/nestedfile
/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks$ py3
>>> import os
# NOFOLLOW
>>> for (dir, subs, files) in os.walk('test1', followlinks=False):
... print(*(repr(x) for x in (dir, subs, files)))
... print('%r => %r\n' % (dir, os.path.realpath(dir)))
...
'test1' ['dir', 'dirlink'] ['file', 'filelink', 'nestedfilelink']
'test1' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/test1'
'test1/dir' [] ['nestedfile']
'test1/dir' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/test1/dir'
# FOLLOW
>>> for (dir, subs, files) in os.walk('test1', followlinks=True):
... print(*(repr(x) for x in (dir, subs, files)))
... print('%r => %r\n' % (dir, os.path.realpath(dir)))
...
'test1' ['dir', 'dirlink'] ['file', 'filelink', 'nestedfilelink']
'test1' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/test1'
'test1/dir' [] ['nestedfile']
'test1/dir' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/test1/dir'
'test1/dirlink' [] ['nestedfile']
'test1/dirlink' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/test1/dir'
-----------------------------------------------------------------------------------
# when recursive links are present?
# RECURSIVE
/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks$ ls -l temp
drwxr-xr-x 3 blue wheel 102 Feb 9 11:38 sub
/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks$ ls -l temp/sub
drwxr-xr-x 3 blue wheel 102 Feb 9 11:40 subsub
/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks$ ls -l temp/sub/subsub
lrwxr-xr-x 1 blue wheel 9 Feb 9 11:40 recur -> ../../sub
# NOFOLLOW
>>> for (dir, subs, files) in os.walk('temp', followlinks=False):
... print(*(repr(x) for x in (dir, subs, files)))
... print('%r => %r\n' % (dir, os.path.realpath(dir)))
...
'temp' ['sub'] []
'temp' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp'
'temp/sub' ['subsub'] []
'temp/sub' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub'
'temp/sub/subsub' ['recur'] []
'temp/sub/subsub' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub/subsub'
# FOLLOW
>>> level = 0
>>> for (dir, subs, files) in os.walk('temp', followlinks=True):
... print(*(repr(x) for x in (dir, subs, files)))
... print('%r => %r\n' % (dir, os.path.realpath(dir)))
... if level > 10: break
... level += 1
...
'temp' ['sub'] []
'temp' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp'
'temp/sub' ['subsub'] []
'temp/sub' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub'
'temp/sub/subsub' ['recur'] []
'temp/sub/subsub' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub/subsub'
'temp/sub/subsub/recur' ['subsub'] []
'temp/sub/subsub/recur' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub'
'temp/sub/subsub/recur/subsub' ['recur'] []
'temp/sub/subsub/recur/subsub' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub/subsub'
'temp/sub/subsub/recur/subsub/recur' ['subsub'] []
'temp/sub/subsub/recur/subsub/recur' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub'
'temp/sub/subsub/recur/subsub/recur/subsub' ['recur'] []
'temp/sub/subsub/recur/subsub/recur/subsub' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub/subsub'
'temp/sub/subsub/recur/subsub/recur/subsub/recur' ['subsub'] []
'temp/sub/subsub/recur/subsub/recur/subsub/recur' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub'
'temp/sub/subsub/recur/subsub/recur/subsub/recur/subsub' ['recur'] []
'temp/sub/subsub/recur/subsub/recur/subsub/recur/subsub' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub/subsub'
'temp/sub/subsub/recur/subsub/recur/subsub/recur/subsub/recur' ['subsub'] []
'temp/sub/subsub/recur/subsub/recur/subsub/recur/subsub/recur' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub'
'temp/sub/subsub/recur/subsub/recur/subsub/recur/subsub/recur/subsub' ['recur'] []
'temp/sub/subsub/recur/subsub/recur/subsub/recur/subsub/recur/subsub' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub/subsub'
'temp/sub/subsub/recur/subsub/recur/subsub/recur/subsub/recur/subsub/recur' ['subsub'] []
'temp/sub/subsub/recur/subsub/recur/subsub/recur/subsub/recur/subsub/recur' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp/sub'
# NONRECURSIVE BUT REPEATED
/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks$ ls -l temp2
total 0
drwxr-xr-x 3 blue wheel 102 Feb 9 12:09 dir1
drwxr-xr-x 3 blue wheel 102 Feb 9 11:54 dir2
drwxr-xr-x 3 blue wheel 102 Feb 9 11:54 dir3
/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks$ ls -l temp2/dir1
-rw-r--r-- 1 blue wheel 5 Feb 9 12:09 file
/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks$ ls -l temp2/dir2
lrwxr-xr-x 1 blue wheel 7 Feb 9 11:54 dir1_A -> ../dir1
/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks$ ls -l temp2/dir3
lrwxr-xr-x 1 blue wheel 7 Feb 9 11:54 dir1_B -> ../dir1
# NOFOLLOW
>>> for (dir, subs, files) in os.walk('temp2', followlinks=False):
... print(*(repr(x) for x in (dir, subs, files)))
... print('%r => %r\n' % (dir, os.path.realpath(dir)))
...
'temp2' ['dir1', 'dir2', 'dir3'] []
'temp2' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp2'
'temp2/dir1' [] ['file']
'temp2/dir1' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp2/dir1'
'temp2/dir2' ['dir1_A'] []
'temp2/dir2' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp2/dir2'
'temp2/dir3' ['dir1_B'] []
'temp2/dir3' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp2/dir3'
# FOLLOW
>>> for (dir, subs, files) in os.walk('temp2', followlinks=True):
... print(*(repr(x) for x in (dir, subs, files)))
... print('%r => %r\n' % (dir, os.path.realpath(dir)))
...
'temp2' ['dir1', 'dir2', 'dir3'] []
'temp2' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp2'
'temp2/dir1' [] ['file']
'temp2/dir1' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp2/dir1'
'temp2/dir2' ['dir1_A'] []
'temp2/dir2' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp2/dir2'
'temp2/dir2/dir1_A' [] ['file']
'temp2/dir2/dir1_A' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp2/dir1'
'temp2/dir3' ['dir1_B'] []
'temp2/dir3' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp2/dir3'
'temp2/dir3/dir1_B' [] ['file']
'temp2/dir3/dir1_B' => '/MY-STUFF/Code/mergeall/test/ziptools/test-symlinks/temp2/dir1'