Directory Traversal
This is an example of two methods for doing a depth-first traversal of a directory tree.
traverse.sh uses subshells to traverse each subdirectory.
traverse2.sh uses a single shell, which is probably more efficient.
tree.tar.gz (download) contains a simple directory tree for testing with:
a/ a/ac/ a/A a/ad/ a/ad/Another File a/aa/ a/aa/AA a/File With Spaces a/ab/ a/ab/AB d/ d/D d/da/ d/db/ d/db/This is a file d/dc/ d/dd/ README c/ c/cb/ c/C c/ca/ c/cc/ c/cd/ b/ b/ba/ b/bb/ b/B b/bc/ b/bd/ traverse2.sh
The script traverse.sh (download) runs like this:
Directory: a File: A Directory: aa File: AA Directory: ab File: AB Directory: ac Directory: ad File: Another File File: File With Spaces Directory: b File: B Directory: ba Directory: bb Directory: bc Directory: bd Directory: c File: C Directory: ca Directory: cb Directory: cc Directory: cd Directory: d File: D Directory: da Directory: db File: This is a file Directory: dc Directory: dd File: README File: traverse2.sh File: traverse.sh File: tree.tar.gz
The script traverse2.sh (download) runs like this:
Directory: ./a File: ./a/A Directory: ./a/aa File: ./a/aa/AA Directory: ./a/ab File: ./a/ab/AB Directory: ./a/ac Directory: ./a/ad File: ./a/ad/Another File File: ./a/File With Spaces Directory: ./b File: ./b/B Directory: ./b/ba Directory: ./b/bb Directory: ./b/bc Directory: ./b/bd Directory: ./c File: ./c/C Directory: ./c/ca Directory: ./c/cb Directory: ./c/cc Directory: ./c/cd Directory: ./d File: ./d/D Directory: ./d/da Directory: ./d/db File: ./d/db/This is a file Directory: ./d/dc Directory: ./d/dd File: ./README File: ./traverse2.sh File: ./traverse.sh File: ./tree.tar.gz
Steve's Bourne / Bash shell scripting tutorial