{"id":20456701,"url":"https://github.com/jgoerzen/taperead","last_synced_at":"2026-08-08T15:02:26.017Z","repository":{"id":66276390,"uuid":"148537072","full_name":"jgoerzen/taperead","owner":"jgoerzen","description":"Read all files from a tape","archived":false,"fork":false,"pushed_at":"2018-09-18T22:00:04.000Z","size":25,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-08T05:27:58.246Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jgoerzen.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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-09-12T20:19:35.000Z","updated_at":"2018-09-18T22:00:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"e14bbd49-aa33-48cf-b767-461df0aab200","html_url":"https://github.com/jgoerzen/taperead","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jgoerzen/taperead","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgoerzen%2Ftaperead","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgoerzen%2Ftaperead/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgoerzen%2Ftaperead/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgoerzen%2Ftaperead/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jgoerzen","download_url":"https://codeload.github.com/jgoerzen/taperead/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgoerzen%2Ftaperead/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36412036,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-06T04:43:03.162Z","status":"online","status_checked_at":"2026-08-08T02:00:08.763Z","response_time":96,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-11-15T11:23:42.528Z","updated_at":"2026-08-08T15:02:25.860Z","avatar_url":"https://github.com/jgoerzen.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+TITLE: taperead: read all files on a tape\n\n* Background\n\nTape storage media generally are made up of sequential, unnamed files.\nI had a need to read in the data from my old tapes in order to\ntransfer it to more modern media.  Some of these tapes contained\nmultiple files - archives of various sorts, backups, etc.  I wanted a\nscript to do so.\n\nThis script will read every file on a tape (stopping when it\nencounters multiple 0-byte reads from the drive).  The files will be\nnumbered sequentially.  Logs from =dd= will be saved alongside the\nfiles for later inspection for errors, etc.\n\nOther than standard Unix tools, ths script also using mbuffer, though\nthis is completely optional and can easily enough be removed from the\npipeline in the script.\n\n* Usage\n\nSomething such as this will do it:\n\n=TAPE=/dev/nst0 taperead=\n\nFiles will be created in the current working directory.  Additional dd\noptions, such as blocksize or error handling, may be set with the\n=DDOPTS= environment variable.  See the comments in the script.\n\nThe output will be a series of .bin files representing the contents of\nthe tape, and corresponding log files representing the output of dd.\nIf any log files indicate an error, the output from taperead from that\npoint forth should be considered suspect.  (Files may be truncated,\netc.)\n\nAdditionally, a file named =sums= will be created with the sha256sum\nof every tape file read.  These will be verified after the tape is read.\n\n* Copyright\n\nCopright (c) 2018 John Goerzen \u003cjgoerzen@complete.org\u003e\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjgoerzen%2Ftaperead","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjgoerzen%2Ftaperead","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjgoerzen%2Ftaperead/lists"}