On this page:
tar
tar->output
tar-gzip

6 tar File Creation

 (require file/tar) package: base
The file/tar library provides utilities to create archive files in USTAR format, like the archive that the Unix utility pax generates. The USTAR format imposes limits on path lengths. The resulting archives contain only directories, files, and symbolic links, and owner information is not preserved; the owner that is stored in the archive is always “root.”
Symbolic links (on Unix and Mac OS X) are not followed, and the path in a link must be less than 100 bytes.

procedure

(tar tar-file 
  path ... 
  [#:exists-ok? exists-ok? 
  #:path-prefix path-prefix 
  #:get-timestamp get-timestamp]) 
  exact-nonnegative-integer?
  tar-file : path-string?
  path : path-string?
  exists-ok? : any/c = #f
  path-prefix : (or/c #f path-string?) = #f
  get-timestamp : (path? . -> . exact-integer?)
   = 
(if timestamp
    (lambda (p) timestamp)
    file-or-directory-modify-seconds)
Creates tar-file, which holds the complete content of all paths. The given paths are all expected to be relative paths for existing directories and files (i.e., relative to the current directory). If a nested path is provided as a path, its ancestor directories are also added to the resulting tar file, up to the current directory (using pathlist-closure).

If exists-ok? is #f, then an exception is raised if tar-file exists already. If exists-ok? is true, then tar-file is truncated or replaced if it exists already.

If path-prefix is not #f, then it is prefixed to each path in the archive.

The get-timestamp function is used to obtain the modification date to record in the archive for each file or directory.

Changed in version 6.0.0.3 of package base: Added the #:get-timestamp argument. Changed in version 6.1.1.1: Added the #:exists-ok? argument.

procedure

(tar->output paths 
  [out 
  #:path-prefix path-prefix 
  #:get-timestamp get-timestamp]) 
  exact-nonnegative-integer?
  paths : (listof path?)
  out : output-port? = (current-output-port)
  path-prefix : (or/c #f path-string?) = #f
  get-timestamp : (path? . -> . exact-integer?)
   = 
(if timestamp
    (lambda (p) timestamp)
    file-or-directory-modify-seconds)
Packages each of the given paths in a tar format archive that is written directly to the out. The specified paths are included as-is (except for adding path-prefix, if any); if a directory is specified, its content is not automatically added, and nested directories are added without parent directories.

Changed in version 6.0.0.3 of package base: Added the #:get-timestamp argument.

procedure

(tar-gzip tar-file    
  paths ...    
  [#:exists-ok? exists-ok?    
  #:path-prefix path-prefix    
  #:get-timestamp get-timestamp])  void?
  tar-file : path-string?
  paths : path-string?
  exists-ok? : any/c = #f
  path-prefix : (or/c #f path-string?) = #f
  get-timestamp : (path? . -> . exact-integer?)
   = 
(if timestamp
    (lambda (p) timestamp)
    file-or-directory-modify-seconds)
Like tar, but compresses the resulting file with gzip.

Changed in version 6.0.0.3 of package base: Added the #:get-timestamp argument. Changed in version 6.1.1.1: Added the #:exists-ok? argument.