bin/60532: port truncate(1) from FreeBSD

"Ivan Shmakov via gnats" <[email protected]> Mon, 3 Aug 2026 08:35:01 +0000 (UTC)
Newsgroups gmane.os.netbsd.bugs
Message-ID <[email protected]>
>Number:         60532
>Category:       bin
>Synopsis:       port truncate(1) from FreeBSD
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    bin-bug-people
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Mon Aug 03 08:35:00 +0000 2026
>Originator:     Ivan Shmakov
>Release:        NetBSD 10.1
>Organization:
Dbus-free station.
>Environment:
Architecture: x86_64
Machine: amd64
>Description:

	Please port truncate(1) [1] from FreeBSD:

 > NAME
 >     truncate - resize files or manage file space

 > SYNOPSIS
 >     truncate [-c] -s [+|-|%|/]size[SUFFIX] file ...
 >     truncate [-c] -r rfile file ...
 >     truncate [-c] -d [-o offset[SUFFIX]] -l length[SUFFIX] file ...

 > DESCRIPTION
 >     The truncate utility adjusts the length of each regular file
 >     given on the command-line, or performs space management with
 >     the given offset and the length over a regular file given on
 >     the command-line.

[1] http://man.freebsd.org/cgi/man.cgi?query=truncate&sektion=1

	truncate(1) allows for directly changing the size of a file,
	including creating a sparse file.  In place of the old trick of
	using dd(1) to write a block at an offset of size minus one:

$ dd if=/dev/zero of=bigdisk.2048.udf seek=9999999 count=1 

	(From newfs_udf(8).)  It becomes possible to create a sparse
	file like:

$ truncate -s5000000K -- bigdisk.2048.udf 

	Also, I find it occasionally convenient when recovering after
	adding arbitrary data to a file by accident; like, say:

$ date >> foo 
$ truncate -s-29 -- foo 

>How-To-Repeat:

>Fix: