7 tar File Extraction
(require file/untar) | package: base |
procedure
(untar in [ #:dest dest-path #:strip-count strip-count #:permissive? permissive? #:filter filter-proc]) → void? in : (or/c path-string? input-port?) dest-path : (or/c path-string? #f) = #f strip-count : exact-nonnegative-integer? = 0 permissive? : any/c = #f
filter-proc :
(path? (or/c path? #f) symbol? exact-integer? (or/c path? #f) exact-nonnegative-integer? exact-nonnegative-integer? . -> . any/c) = (lambda args #t)
If dest-path is not #f, every path in the archive is prefixed to determine the destination path of the extracted item.
If strip-count is positive, then strip-count path elements are removed from the item path from the archive (before prefixing the path with dest-path); if the item’s path contains strip-count elements, then it is not extracted.
Unless permissive? is true, then archive items with paths containing an up-directory indicator are disallowed, and a link item whose target is an absolute path or contains an up-directory indicator is also disallowed. Absolute paths are always disallowed. A disallowed path triggers an exception.
For each item in the archive, filter-proc is applied to
the item’s path as it appears in the archive;
a destination path that is based on the path in the archive, strip-count, and dest-path–which can be #f if the item’s path does not have strip-count or more elements;
a symbol representing the item’s type—
'file, 'dir, 'link, 'hard-link, 'character-special, 'block-special, 'fifo, 'contiguous-file, 'extended-header, 'extended-header-for-next, or 'unknown— where only 'file, 'dir, or 'link can be unpacked by untar; an exact integer representing the item’s size;
a target path for a 'link type or #f for any other type;
an integer representing the item’s modification date; and
an integer representing the item’s permissions
If the result of filter-proc is #f, then the item is not unpacked.
Changed in version 6.3 of package base: Added the #:permissive? argument.
Changed in version 6.7.0.4: Support long paths and long symbolic-link
targets using POSIX.1-2001/pax and GNU
extensions.