Skip to main content

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

Project description



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>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
deepest-2.0.1.tar.gz (8.0 kB) Copy SHA256 hash SHA256 Source None Jan 13, 2018

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page