TL;DR
入力されたディレクトリ以下のディレクトリと下記メタデータを取り出して JSON 形式で出力する Python module を作成しました。
項目 | 説明 |
---|---|
type | "Directory" or "File" |
parent | 親ディレクトリの名前 |
basename | ファイルのベース名 |
hasPart | ディレクトリの場合、格納されているファイルとディレクトリのリスト |
contentSize | ファイルサイズ (bytes) |
creationDatetime | 作成日時 |
modificationDatetime | 更新日時 |
背景
ディレクトリツリーを出力するコマンドと言えば tree
です。作成日時やファイルサイズなどを確認したいときは ls
コマンドがよく利用されるでしょう。これらの両方を一覧で取得したい、そんな場面に私が遭遇しました。
これらのコマンドと他の様々なコマンドを組み合わせて、指定されたディレクトリ内のディレクトリおよびファイルのメタデータ(ファイルのベース名、サイズ、作成日時など)を取り出すことはできると思います。しかしながら CLI に不慣れな私にとってそれを作ることは正直面倒でした。それよりも普段使いしている Python を利用する方が楽だと感じ、コマンドラインツールを作りました。下記 GitHub リポジトリにて公開しています。
Surpris/directory-structure-py
インストール方法
リポジトリから直接インストール
pip install git+https://github.com/Surpris/directory-structure-py.git
ポータブル(Windows のみ)
2024/11/9 時点では v0.1-portable で Windows 用 exe ファイルをリリースしています。そちらをダウンロードして展開することで利用可能です。展開先には batch ファイルと exe ファイルが入っていますが、batch ファイルの方にディレクトリツリーを取り出したいフォルダ or ファイルを drag & drop することで利用可能です。
使い方(pip インストールした場合)
基本的には python -m
で使用できます。
python -m directory_structure_py <file_or_directory_path> \
--dst <output_path> \
--include_root_path \ // option
--in_tree \ // option
--to_tsv // option
オプションの説明は次の通りです。
オプション | 説明 |
---|---|
dst | 出力先ファイルパス。このオプションがない場合、入力されたディレクトリまたはファイルが存在するディレクトリに結果が出力されます。 |
include_root_path | オプションが付いている場合、入力されたディレクトリまたはファイルのフルパスを含める。 |
in_tree | オプションが付いている場合、hasPart の中にディレクトリ内のデータのメタデータが含まれる形で出力されます。 |
to_tsv | オプションが付いている場合、TSV 形式でも結果を出力します。 |
アルゴリズムの説明
複雑な処理は入れていません。核となる関数は次の四つです。
get_metadata_of_single_file
この関数は pathlib.Path
クラスを利用してディレクトリまたはファイルのメタデータを取り出し、Dict 形式で出力します。
get_metadata_of_files_in_list_format
この関数は再帰型関数です。get_metadata_of_single_file
を使って取り出されたメタデータをリストにして出力します。メタデータリストは contents
キーに格納されます。
_construct_tree
この関数は再帰型関数です。get_metadata_of_files_in_list_format
により出力されるメタデータリストに基づき、各ディレクトリの hasPart
に含まれる名前に対応するディレクトリまたはファイルのメタデータを、そのメタデータリストから引っ張ってきて hasPart
内の名前と置き換えます。
list2tree
この関数は _construct_tree
のラッパー関数です。_construct_tree
により出力されるメタデータツリーを contents
キーの値として格納し、結果を出力します。
まとめ
本記事では私が作成した、ディレクトリと pathlib.Path
で取得できるメタデータを取り出して JSON 形式で出力する Python module である directory-structure-py を紹介しました。このツールの出力結果は JSON 形式であり、これをヒトが見やすい形式で表示するツールの追加も検討しています。このツールの不具合や機能要望があればぜひ Issues に投稿いただければ幸いです。