An open API service indexing awesome lists of open source software.

https://github.com/kamwoods/splendir

A Directory Scanner and Printer
https://github.com/kamwoods/splendir

desktop-app directory-listing file-explorer iced linux macos rust windows

Last synced: about 2 months ago
JSON representation

A Directory Scanner and Printer

Awesome Lists containing this project

README

          

## Splendir

[![GitHub issues](https://img.shields.io/github/issues/kamwoods/splendir.svg)](https://github.com/kamwoods/splendir/issues)
[![Build](https://github.com/kamwoods/splendir/actions/workflows/rust.yml/badge.svg)](https://github.com/kamwoods/splendir/actions/workflows/rust.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
[![GitHub forks](https://img.shields.io/github/forks/kamwoods/splendir.svg)](https://github.com/kamwoods/splendir/network)

### A High Performance Directory Scanner and Printer

Splendir is a fast cross-platform directory scanner with a GUI interface. Splendir generates tree views of files in a directory, customizable lists of file metadata (including file types, MIME types, and hashes), and reports of directory contents and file type distributions.

Features:
- Multi-threaded processing for high speed scans and hash calculations
- Autodetects filesystem on which directory is being scanned
- Virtual scrolling in tree and file list modes for live views of millions of files
- Multiple scan presets
- Live sorting of output in file list view
- File format identification
- Directory listings exported as UTF-8 encoded CSV files, tree structures as UTF-8 encoded text files

Splendir is built in [Rust](https://rust-lang.org/) and implements a GUI in [iced](https://iced.rs/). Multi-threading for hash calculations is implemented using [rayon](https://github.com/rayon-rs/rayon). Splendir is currently in alpha, but releases can be consider "feature complete" for the publicly documented features. The main branch of this repo may include development code that leads the current release.

### Install

Releases include a Ubuntu/Debian package and standalone executables for Linux (x64), Windows 11 (x64) and macOS (Apple M-series silicon). Follow the instructions in one of the sections below.

**Ubuntu/Debian**

Download ```splendir-x64.deb``` from the latest release in [Releases](https://github.com/kamwoods/splendir/releases) and in a terminal run:

```
cd /your/download/directory
sudo dpkg -i splendir-x64.deb
```

**Any Linux**

Download ```splendir-linux-x64.tar.gz``` from the latest release in [Releases](https://github.com/kamwoods/splendir/releases) and extract the .tar.gz file. Then copy the executables to ```/usr/local/bin```:

```
cd /your/download/directory
tar zxvf splendir-linux-x64.tar.gz
sudo cp splendir /usr/local/bin
```

Run the GUI by typing ```splendir``` in the terminal and hitting enter.

**Windows 11**

Download ```splendir-windows-x64.tar.gz``` from the latest release in [Releases](https://github.com/kamwoods/splendir/releases) and extract the files. Double-click on ```splendir.exe``` to run the GUI. A warning may appear that the ```Visual Studio C++ Redistributable``` package needs to be installed first (this can be [downloaded from Microsoft](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170)). A warning dialog about an unknown developer may appear when running the GUI. Click ```More info``` and select ```Run Anyway```.

**macOS**

Download ```splendir-macos-tar.gz``` from the latest release in [Releases](https://github.com/kamwoods/splendir/releases) and extract the files. Double-clicking on ```splendir``` will generate an untrusted application warning. Navigate to ```Apple Menu > System Settings``` and then select ```Privacy & Security``` in the sidebar. In ```Security```, click ```Open``` and ```Open Anyway```. You will be asked for a login password to confirm.

### Using Splendir

Click the **Browse...** button to select a local directory, then click the **Start Scan** button. The **Mode:** dropdown can be set to:

- **Detailed File List** (outputs a file list with metadata)
- **Tree View** (outputs a graphical tree view similar to the command-line tool "tree")
- **Directory Analysis** (a high-level overview of the directory contents).

All three views are generated when **Start Scan** is clicked. When a scan is complete, an **Export** button will appear to allow export of the content. If **Detailed File List** is currently selected, clicking **Export** will generate a CSV file. If **Tree View** is selected, it will generate a UTF-8 text representation of the tree. If **Directory Analysis** is selected, it will generate a text file containing that overview.

The **Traversal Options** control which types of files should be included in the scan, and (optionally) a maximum directory depth for the scan.

- **Include dotfiles** includes directories and files beginning with a ".", typically signifying a system or configuration file on Linux and macOS.
- **Follow symlinks** follows symbolic links to access a target file or directory
- **Skip virtual filesystems** is checked by default, and skips specific locations including ``/proc``, ``/run``, ``/sys``, and ``/tmp`` on Linux if you happen to be scanning a live file system from the ``/`` root directory, or ``devfs`` and ``autofs`` mounts on macOS.
- **Stay on same filesystem** is unchecked by default, but can be checked to restrict the scan from switching filesystems (for example, in Linux if a directory contains multiple mount locations for different filesystems).

Splendir will distribute work among all available CPU cores to provide maximum performance when running long scans (for example, computing MD5 or SHA hashes for many files). Terminate a long-running scan by clicking **Cancel** at any time. Clicking **Exit** during a scan will also trigger a cancellation.

![Splendir Directory Listing View](assets/sds-dirview.png)

Both the **Directory Listing** view and **Tree View** are implemented with a virtual scrolling feature to provide live views of directories of any size. When scanning large directories, you will see a progress report as the tool builds this data structure. Once the directory has been scanned, you can scroll to any point in the output to inspect and review before exporting. The **Directory Listing** view collapses all selected columns into the viewable area by default. To see the full output in each column, click **Expand Columns**. The vertical scroll position is maintained when expanding or collapsing columns.

Adjust the **Sort Options** to instantly view and export sorted results without having to rescan. The **Default** sort option is an alphabetized directory walk (all subdirectory entries grouped together at each level).

Check or uncheck the basic metadata (File Name, Path, Path + Name, Size, Created, Modified, Accessed) in **File Options** to add or remove these columns without having to rescan. Checking Format, Media Type, MD5, SHA256, or SHA512 will display the column but the results will not be populated unless these were checked at the time of the scan.

![Splendir Tree Listing View](assets/sds-diropen.png)

Hovering over an individual line in the output will highlight that line. Right-clicking on the line will bring up a context dialog providing the option to **Show File In Folder**, or **Close** and return to the output listing.

![Splendir Tree Listing View](assets/sds-treeview.png)

The **Tree View** displays a simple graphical tree view along with a count of the total number of nodes (directories and files) in the tree. Currently, the tree view does not display any file or directory metadata.

![Splendir Directory Analysis View](assets/sds-analysis.png)

The **Directory Analysis** view provides some basic information about the total size of the directory scanned and the types and counts of files encountered. This view also indicates the filesystem type for the base directory associated with the scan, and provides a simple distribution of the file sizes encountered. In certain scan scenarios involving live file systems, directories containing virtual ("special") files related to system operations may be skipped. In cases where the Splendir application does not have the requisite permissions to process a particular file or directory, those cases will be logged and noted in the Directory Analysis results view. These situations are described in further detail below.

![Splendir Directory Analysis Warnings](assets/sds-warnings.png)

Splendir makes an effort not to elide or obfuscate information about which files and directory entries on a filesystem have been skipped, whether those entries are likely irrelevant to a preservation process (virtual files on a live filesystem) or potentially more important (failed to process because the current user running the Splendir application does not have permissions to access them). The above screenshot shows Splendir recording both of these cases - virtual filesystems and special files areas skipped, and regular files not processed due to permissions issues - in the Directory Analysis output.

![Splendir Log Access](assets/sds-logs.png)

Splendir maintains a daily log in the ``.splendir`` directory of the user's home directory, the content of which is maintained for 30 days (or until the next time the Splendir application is launched after 30 days from the creation of that log file). These logs include more detailed infomation about the operation of the Splendir tool in addition to directory skip notifications and permissions errors that are reported in the **Directory Analysis** output. Clicking the **Show Logs** button in the bottom right of the interface will bring up a file manager window providing direct access to these daily logs.

### Build (Developers and Contributors)

To build, ensure you are using [Rust 1.91.0 or newer](https://www.rust-lang.org/tools/install).

Clone this repo with the command:

```git clone https://github.com/kamwoods/splendir```

Navigate to the root of your cloned directory, and build the Splendir binary with:

```shell
cargo build --release
```

### Contributing

Open an issue in this repository to report bugs or request features, or open a PR to submit updates.

### License

Distributed under the terms of the MIT License. See the LICENSE file for additional details.