phatsort
FAT filesystem sort utility
https://github.com/ExtremaIS/phatsort-haskell#readme
| Version on this page: | 0.5.0.1@rev:2 |
| LTS Haskell 23.28: | 0.6.0.0@rev:4 |
| Stackage Nightly 2024-12-09: | 0.6.0.0@rev:4 |
| Latest on Hackage: | 0.6.0.0@rev:4 |
phatsort-0.5.0.1@sha256:412055ca26be7030343237ae0365b2e230e777f677ce026fc60fefec18c0fb20,3234Module documentation for 0.5.0.1
- PhatSort
- PhatSort.Cmd
- PhatSort.Monad
- PhatSort.Monad.FileSystem
- PhatSort.Monad.Stdio
- PhatSort.Monad.Sync
- PhatSort.Monad.Trans
- PhatSort.Script
- PhatSort.SortOptions
PhatSort
Overview
The PhatSort project provides two command-line utilities for sorting files
and directories on FAT filesystems. The phatsort utility sorts files and
directories that are already on the filesystem. The seqcp utility copies
files and directories to the filesystem in sorted order.
There are many MP3 players that allow you to mount the device as external
storage and manage the media yourself. The storage generally uses a FAT
filesystem. When copying multiple files onto the storage, using the command
line (cp/mv) or a GUI, they are generally stored in an arbitrary order.
This is not a problem if the firmware of the MP3 player sorts by filename, but
many MP3 players use the order in the FAT filesystem without sorting, which
results in podcasts and album tracks being played out of order.
There are some utilities that sort the FAT tables of an unmounted filesystem. (See Related Software for information and links.) Unfortunately, there are many devices for which this does not work. PhatSort takes a different approach to solving the problem. It works by creating new directories and moving (“renaming”) the files in the desired order, while the filesystem is mounted. This method works on all devices that have been tried so far.
PhatSort also (optionally) forces the filesystem buffers to be written to the
storage media after each change. This helps avoid write failures when using
devices that have problems with writing large amounts of data. Note that the
seqcp utility helps with this issue even on non-FAT filesystems.
CLI
Requirements
PhatSort has only been tested on Linux. It might work on other operating systems. Scripts that are output use POSIX shell commands and therefore require a POSIX shell to execute.
Installation
.deb Package Installation
Check the Releases page for .deb packages.
.rpm Package Installation
Check the Releases page for .rpm packages.
Installation From Hackage
Install PhatSort from Hackage using Cabal as follows:
$ cabal v2-install phatsort
Installation From Stackage
Install PhatSort from Stackage using Stack as follows:
$ stack install phatsort
Usage
See the phatsort and seqcp man
pages for usage information.
Related Software
FATSort is a command-line utility that
sorts unmounted FAT filesystems by direct manipulation of the FAT tables.
Unfortunately, there are many devices for which this does not work.
YAFS is a
command-line utility that sorts unmounted FAT filesystems by direct
manipulation of the FAT tables.
Visual YAFS
provides a GUI. I have not tried either of these.
DriveSort is Windows GUI
software that sorts unmounted FAT filesystems by direct manipulation of the
FAT tables. I have not tried it.
Project
Links
- Hackage: https://hackage.haskell.org/package/phatsort
- Stackage: https://www.stackage.org/package/phatsort
- GitHub: https://github.com/ExtremaIS/phatsort-haskell
- GitHub Actions CI: https://github.com/ExtremaIS/phatsort-haskell/actions
Tags
All releases are tagged in the main branch. Release tags are signed using
the
[email protected] GPG key.
Contribution
Issues and feature requests are tracked on GitHub: https://github.com/ExtremaIS/phatsort-haskell/issues
Issues may also be submitted via email to [email protected].
License
This project is released under the
MIT License as specified in the
LICENSE file.
Changes
phatsort-haskell Changelog
This project follows the Haskell package versioning policy, with
versions in A.B.C.D format. A may be incremented arbitrarily for
non-technical reasons, but semantic versioning is otherwise
followed, where A.B is the major version, C is the minor version, and D
is the patch version. Initial development uses versions 0.0.0.D, for which
every version is considered breaking.
The format of this changelog is based on Keep a Changelog, with the following conventions:
- Level-two heading
Unreleasedis used to track changes that have not been released. - Other level-two headings specify the release in
A.B.C.D (YYYY-MM-DD)format, with newer versions above older versions. - Level-three headings are used to categorize changes as follows:
- Breaking
- Non-Breaking
- Changes are listed in arbitrary order and present tense.
0.5.0.1 (2022-03-02)
Non-Breaking
- Bump
optparse-applicativedependency version upper bound
0.5.0.0 (2021-12-10)
Breaking
- Add
seqcp - Check that each target directory is not a mount point
- Call
syncsystem call via FFI instead of running thesynccommand
Non-Breaking
- Add tests using mocking
0.4.0.0 (2021-06-25)
Breaking
- Fix
--helpwhen usingoptparse-applicative0.16
Non-Breaking
- Refactor Nix configuration
0.3.0.0 (2021-05-27)
Breaking
- Add support for
optparse-applicative0.16
Non-Breaking
- Add
.deband.rpmpackaging - Add Cabal support to
Makefile - Add Cabal tests to GitHub Actions
- Add stan static analysis
0.2.0.2 (2020-11-23)
Non-Breaking
- Use GitHub Actions instead of Travis CI
0.2.0.1 (2020-11-08)
Non-Breaking
- Rename Git default branch to
main
0.2.0.0 (2020-07-26)
Breaking
- Add syncing,
--no-syncoption
Non-Breaking
- Refactor
Makefile, addSTACK_NIX_PATHsupport - Add
test-allcommand toMakefile - Add Nix configuration
0.1.0.3 (2019-12-22)
Non-Breaking
- Switch back to using
LibOAinstead ofoptparse-applicative-supplement
0.1.0.2 (2019-12-22)
Non-Breaking
- Use
optparse-applicative-supplement
0.1.0.1 (2019-12-22)
Non-Breaking
- Add Travis CI
- Turn off threading
0.1.0.0 (2019-12-21)
Breaking
- Initial public release