{"id":37133459,"url":"https://github.com/falzm/fsdiff","last_synced_at":"2026-01-14T15:35:02.671Z","repository":{"id":45186346,"uuid":"153461904","full_name":"falzm/fsdiff","owner":"falzm","description":"Filesystem changes tracking tool 🔍","archived":true,"fork":false,"pushed_at":"2025-03-13T07:29:41.000Z","size":4196,"stargazers_count":11,"open_issues_count":2,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-09T03:29:29.608Z","etag":null,"topics":["cli","filesystem","golang"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/falzm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-17T13:30:14.000Z","updated_at":"2025-04-13T14:27:14.000Z","dependencies_parsed_at":"2024-06-19T04:00:50.744Z","dependency_job_id":"bedff2a1-0349-45fc-91f0-a39eb5e3b587","html_url":"https://github.com/falzm/fsdiff","commit_stats":{"total_commits":31,"total_committers":3,"mean_commits":"10.333333333333334","dds":"0.22580645161290325","last_synced_commit":"27ff34efdb7e59b2cc83c86450c0095b03500f56"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/falzm/fsdiff","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falzm%2Ffsdiff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falzm%2Ffsdiff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falzm%2Ffsdiff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falzm%2Ffsdiff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/falzm","download_url":"https://codeload.github.com/falzm/fsdiff/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falzm%2Ffsdiff/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28424374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T13:30:50.153Z","status":"ssl_error","status_checked_at":"2026-01-14T13:29:08.907Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","filesystem","golang"],"created_at":"2026-01-14T15:35:02.074Z","updated_at":"2026-01-14T15:35:02.659Z","avatar_url":"https://github.com/falzm.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fsdiff\n\n`fsdiff` is a simple tool that helps to find out what changes occurred in a filesystem tree.\n\nUsing `fsdiff` involves two steps: first take a `snapshot` of the target filesystem *before* modifications happen,\nthen another one *after*. Then, the `diff` step compares the two snapshots and reports the changes found.\n\nHere is an example illustrating how to use this tool. We start with an existing file tree:\n\n```console\n$ tree test/\ntest\n├── a\n│   ├── b\n│   └── c\n│       └── d\n└── z\n\n2 directories, 3 files\n```\n\nWe take a snapshot of the current state, which will be our reference point in case of later modification:\n\n```console\n$ fsdiff snapshot -o before.snap test/\n```\n\nNow, let's shake things up:\n\n```console\n$ mkdir test/.x\n$ echo y \u003e test/.x/y\n$ rm -rf test/a/c/\n$ echo z \u003e test/a/b\n```\n\nWe now take a second snapshot representing the current state:\n\n```console\n$ fsdiff snapshot -o after.snap test/\n```\n\nTo know what happened during the two snapshots, we run a *diff* operation:\n\n```console\n$ fsdiff diff before.snap after.snap\n+ .x\n+ .x/y\n~ a\n  size:128 mtime:2019-05-19 20:30:22.638232884 +0200 CEST uid:501 gid:20 mode:drwxr-xr-x DIR\n  size:96 mtime:2019-05-19 20:33:26.626202277 +0200 CEST uid:501 gid:20 mode:drwxr-xr-x DIR\n~ a/b\n  size:2 mtime:2019-05-19 20:30:22.528923845 +0200 CEST uid:501 gid:20 mode:-rw-r--r-- checksum:89e6c98d92887913cadf06b2adb97f26cde4849b\n  size:2 mtime:2019-05-19 20:33:38.893340925 +0200 CEST uid:501 gid:20 mode:-rw-r--r-- checksum:3a710d2a84f856bc4e1c0bbb93ca517893c48691\n- a/c\n- a/c/d\n\n2 new, 2 modified, 2 deleted\n```\n\nSimilar to the traditional `diff` tool, the `fsdiff diff` command's exit status has a specific meaning: `0` means no\ndifferences were found, `1` means some differences were found, and `2` means trouble.\n\n\n## Installation\n\n### Pre-compiled binaries\n\nPre-compiled binaries for GNU/Linux and macOS are available for [stable releases](https://github.com/falzm/fsdiff/releases).\n\n### Using Homebrew\n\nOn macOS, you can use the [Homebrew](https://brew.sh/) packaging system:\n\n```console\nbrew tap falzm/fsdiff\nbrew install fsdiff\n```\n\n### Using `go get`\n\n```console\ngo get github.com/falzm/fsdiff\n```\n\n### From source (requires a Go compiler \u003e= 1.16)\n\nAt the top of the sources directory, just type `make fsdiff`. If everything went well, you should end up with binary\nnamed `fsdiff` in your current directory.\n\n\n## Usage\n\nUsage documentation is available by running the `fsdiff help` command.\n\nNote: when performing a `diff` operation, the command will exit with a return code 2 if changes have been detected\nbetween two snapshots, and 0 if no changes. Any other error returns 1.\n\n### File exclusion\n\nDuring a `snapshot`, it is possible to specify *exclusion* patterns using the `--exclude` and `--exclude-from` flags\nto prevent matching files from being included in the resulting snapshot. The format used is compatible with the\n[gitignore](https://git-scm.com/docs/gitignore) format: please refer to the documentation to learn more about it.\n\nNote: patterns specified with the `--exclude` flag are evaluated after the patterns listed in the file\n`--exclude-from` and are added to the global patterns list. This means that you can override an *exclusion* pattern\nspecified in the file by providing the same pattern in *inclusion* mode (i.e. by prefixing it with `!`).\n\n### Shallow mode\n\n`fsdiff` supports a *shallow* mode, in which files checksum are not computed. This can be useful if snapshotting very\nlarge file trees and/or large files as the operation will be much less resource-intensive, at the cost of a less\nprecise change tracking: in *shallow* mode it is not possible to detect file renamings or content-focused file\nchanges anymore.\n\nTo use *shallow* mode, set the `--shallow` command flag during a *snapshot* operation. Note: during a\n*diff* operation, if `fsdiff` detects that either one of the snapshots is *shallow* the operation will be performed\nin *shallow mode* too.\n ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffalzm%2Ffsdiff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffalzm%2Ffsdiff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffalzm%2Ffsdiff/lists"}