General Topics





Tips and How-To


Cross-platform Integrity Checker (Java version) — icj (Beta version)

Usage notes below.

The native C++ version of IntegrityChecker runs only on macOS. It consists of the command line version ic and the simple GUI wrapper.

As of August 2016, diglloydTools adds a Java version of IntegrityChecker. Goals for the Java version:

See FAQ: Known Issues at the end of this page.

Cross-platform compatibility

In the initial release, icj has been tested only on macOS 10.11.6 using Java SE runtime 1.8. No testing has been done on Windows or Linux. However, some care has been taken to avoid common issues:

Compatibility with existing ic files

Existing workflows with the native version of ic are unaffected. Thus icj can be used as an adjunct or a replacement to ic. While icj can verify existing ic hash files, it otherwise operates independently:

Installing the Java version

See notes at end for installing java (on OS X the system should prompt automatically).

The Java command line IntegrityChecker consists of two files: the icj shell script and icj.jar, available as a separate download.

Install icj and icj.jar wherever desired so long as the two files are in the same folder.

The shell script can enable verbose and debug messages by uncommenting (removing the # character) from this line in the icj shell script:

#export OPTIONS="-DVERBOSITY=debug"


This is an early release. Progress information and summary information has not yet been scrutinized for best format and clarity.

Usage is identical to the native macOS version of ic; see the manual pages for ic at left. There are some differences however:

Minor notes on dates:


Assuming folders named “Images” and “Data”, this is what command line invocation looks like. The lines starting with # are comments. Folders always means the folder and all its subfolders, recurisvely.

# verify the folder Images
icj verify Images

# verify the two folders Images and Data
icj status Images Data

# update the two folders Images and Data
icj update-all Images Data

# update only files without hashes in Images and Data
icj update-new Images Data

# update files without hashes or files how modification date has changed
icj update Images Data

# remove .icj files from folder Data and all subfolders
icj clean Data

Wild cards can be used at the command line—a good reason to learn to use Terminal. Example:

diglloydMP:Archive lloyd$ icj update 2016-06*
# icj version 0.1 2016-08-01
# Copyright 2016 DIGLLOYD INC. All Rights Reserved
# Use of this software requires a license.
# Tue Aug 02 10:37:21 PDT 2016

CPUs: 16 using MAX_THREADS = 8
350 folders to process based on [7]={/Volumes/Archive/2016-0606-TripPhotos, /Volumes/Archive/2016-0608-Lily-CorteMaderaGraduation,
/Volumes/Archive/2016-0626-Markleeville-Yosemite, /Volumes/Archive/2016-0628-NikonD810-Yosemite, /Volumes/Archive/2016-0628-PanasonicGX8-Yosemite,
/Volumes/Archive/2016-0628-PentaxK1-Yosemite, /Volumes/Archive/2016-0628-iPhonePanos-postProcessed}
# millis to scan/read 350 folders: 1646

Using icj in macOS — easy drag and drop

The icj shell script must be in your path. See also Command Line Tips.

The macOS Finder allows dragging folders into a Terminal window. This makes it easy to deal with folders or volumes without having to type the names:

  1. Open Terminal, then type “icj ” (don’t forget the space after icj, then the command, then a space. [If icj is not in your PATH, first drag it into the window instead of typing “icj ”. For example:
    icj update-all
  2. Select the desired folders in the Finder, then drag them to the terminal window
  3. Press the RETURN key.
IntegrityChecker icj (java version) hashing files via update-all command

Addendum A: known issues

These are known issues:

AddendumB: installing the java runtime

Download the Java runtime environment. SKIP THIS STEP on Apple macOS; the OS should prompt automatically.


Next page: Tips