deepest

Determine the maximum depth and path length within the current (or a specified) directory tree.


Keywords
deep
License
Other
Install
pip install deepest==2.0.1

Documentation

deepest

Build Status Coverage Status

Diavik Diamond Mine, Canada

“There are older and fouler things than Orcs in the deep places of the world.”

— Gandalf, from “The Lord of the Rings: The Fellowship of the Ring”, by J.R.R. Tolkien

deepest — A cross-platform (and cross-language) command-line utility used to determine the maximum depth of the current (or a specified) directory tree.

Available in both Python and C++ flavors (via the ShedSkin libraries).

Rationale

  • Needed a way to determine how close a project was getting to the 8-subdirectory limit defined by ISO-9660.
  • Needed a way to determine how close to MAX_PATH directories were getting.
    • MAX_PATH is defined as 260 characters on Windows: 3 for the drive (C:\), 1 for the terminating NULL character at the end, and 256 for directories, back-slashes, filenames, and extensions in the middle.
  • “Yes, but… Why Python?”
    • It’s faster for prototyping. (Bias… I’m just more familiar with it.)
    • It gave me an excuse to try out ShedSkin. :-)

Requirements

  • Python >= 2.7, 3.2, 3.3, 3.4, 3.5, 3.6
  • ShedSkin >= 0.9.3, 0.9.4 — optional
  • g++ >= 4.6.2 or clang++ >= 3.2 — optional
  • MinGW/MSYS (2012-04-26 catalog) — optional

Installation

Python (Users):

pip install deepest

Python (Developers):

git clone git@github.com:markgollnick/deepest.git
cd deepest
python setup.py build install
# Alternatively...
make python
pip install dist/deepest-*.tar.gz

C++:

  1. Download and install ShedSkin (instructions).

  2. Run the following:

    ./3to2  # Make some minor adjustments for ShedSkin compatibility
    cd deepest  # This is the dir INSIDE the project's root dir
    shedskin deepest.py
    make
    # Alternatively, from the project's root dir...
    make cpp
    

Usage

Python:

Once installed, you can use it as a script…

$ deepest .
breadth of dirs examined    longest pathname    deepest directory
                      13                  58                    7

longest file: ./workspace/dwarves/digging/deep/deeper/deepest/balrog.log
deepest path: ./workspace/some/really/long/directory/chain/here

…or, you can use it as a library:

>>> import deepest
>>> deepest.get_depth('c:\\workspace')
('c:\\workspace\\some\\really\\long\\directory\\chain\\here', 7)
>>> deepest.get_length('c:\\workspace')
('c:\\workspace\\dwarves\\digging\\deep\\deeper\\deepest\\balrog.log', 59)

C++:

Once compiled, it is a (notably faster) alternative to the Python script:

$ deepest c:\\workspace
breadth of dirs examined    longest pathname    deepest directory
                      13                  59                    7

longest file: c:\workspace\dwarves\digging\deep\deeper\deepest\balrog.log
deepest path: c:\workspace\some\really\long\directory\chain\here

Speed

In a project containing well over 5000 directories with a max depth of 13, the Python and C++ versions (compiled with clang-503.0.40) were pitted against each other. Both versions were run three times each on a Late 2013 Mac Book Pro.

These are the averaged results:

$ time deepest  # Python script
...
real    0m0.423s
user    0m0.244s
sys     0m0.160s

$ time deepest  # C++ binary
...
real    0m0.169s
user    0m0.063s
sys     0m0.101s

In practical observation, using the compiled C++ version may gain you anywhere from a 10% to a whopping 60% boost in speed. :-)

License

Boost Software License, Version 1.0: <http://www.boost.org/LICENSE_1_0.txt>