info > shar

📍 File: sharutils.info, Node: shar Invocation, Next: unshar Invocation, Up: Basic

đŸ“Ļ Invoking shar

If no files are specified, the list of input files is read from standard input. Standard input must not be a terminal. shar creates “shell archives” (or shar files) which are in text format and can be emailed. These files may be unpacked later by executing them with /bin/sh. The resulting archive is sent to standard out unless the -o option is given. A wide range of features provide extensive flexibility in manufacturing shars and in specifying shar “smartness”. Archives may be fairly simple (--vanilla-operation) or essentially a mailable tar archive.

Options may be specified in any order until a file argument is recognized. If the --intermix-type option has been specified, more compression and encoding options will be recognized between the file arguments.

Though this program supports uuencode-d files, they are deprecated. If you are emailing files, please consider mime-encoded files. If you do uuencode, base64 is the preferred encoding method.

This section was generated by AutoGen, using the agtexi-cmd template and the option descriptions for the shar program. This software is released under the GNU General Public License, version 3 or later.

🚀 Quick Reference

Use CaseCommandDescription
đŸ“Ļ Basic shar from C sourcesshar *.c > cprog.sharCreate a shell archive of all .c files
🔇 Silent unpack sharshar -Q *.[ch] > cprog.sharArchive .c and .h files with quiet unpack
âœ‚ī¸ Split uuencoded archiveshar -B -l28 -oarc.sh *.arcSplit into numbered files,uuencode all
📁 Flatten directory hierarchyshar -f /lcl/src/u*.c > u.shRestore by base name only

📋 Menu

â„šī¸ shar help/usage (--help)

This is the automatically generated usage text for shar.

The text printed is the same whether selected with the help option (--help) or the more-help option (--more-help). more-help will print the usage text by passing it through a pager program. more-help is disabled on platforms without a working fork(2) function. The PAGER environment variable is used to select the program, defaulting to more. Both will exit with a status code of 0.

shar (GNU sharutils) - create a shell archive
Usage:  shar [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [<file>...]

Specify compression:
   -p, --intermix-type        specify compression for input files
                                - prohibits the option 'vanilla-operation'
   -C, --compactor=PROG       specify compaction (compression) program PROG
                                - prohibits the option 'vanilla-operation'
                                - may appear multiple times
                                - it must be known to shar: xz gzip bzip2
   -g, --level-of-compression=LEVEL
                              pass LEVEL for compression
                                - it must be in the range: 1 to 9

Specify file encoding methodology:
   -M, --mixed-uuencode       decide uuencoding for each file
   -B, --uuencode             treat all files as binary
                                - an alternate for mixed-uuencode
   -T, --text-files           treat all files as text
                                - an alternate for mixed-uuencode

Specifying file selection and output modes:
   -o, --output-prefix=str    print output to file PREFIX.nn
   -l, --whole-size-limit=SIZE
                              split archive, not files, to SIZE
                                - requires the option 'output-prefix'
                                - is scalable with a suffix: k/K/m/M/g/G/t/T
                                - it must lie in one of the ranges:
                                  8 to 1023, or 8192 to 4194304
   -L, --split-size-limit=SIZE
                              split archive or files to SIZE
                                - requires the option 'output-prefix'
                                - is scalable with a suffix: k/K/m/M/g/G/t/T
                                - it must lie in one of the ranges:
                                  8 to 1023, or 8192 to 4194304
                                - an alternate for 'whole-size-limit'
   -I, --input-file-list=FILE read file list from FILE

Controlling the shar headers:
   -n, --archive-name=NAME    use NAME to document the archive
   -s, --submitter=NAME       override the submitter name with NAME
   -a, --net-headers          output Submitted-by: & Archive-name: headers
                                - requires the option 'archive-name'
   -c, --cut-mark             start the shar with a cut line
   -t, --translate            translate messages in the script

Protecting against transmission issues:
       --no-character-count   do not use `wc -c' to check size
   -D, --no-md5-digest        do not use md5sum digest to verify
   -F, --force-prefix         apply the prefix character on every line
   -d, --here-delimiter=DELIM use DELIM to delimit the files

Producing different kinds of shars:
   -V, --vanilla-operation    produce very simple shars
   -P, --no-piping            use temporary files between programs
   -x, --no-check-existing    blindly overwrite existing files
   -X, --query-user           ask user before overwriting files
                                - prohibits the option 'vanilla-operation'
   -m, --no-timestamp         do not restore modification times
   -Q, --quiet-unshar         avoid verbose messages at unshar time
   -f, --basename             restore in one directory, despite hierarchy

Internationalization options:
       --no-i18n              do not internationalize
       --print-text-domain-dir  print directory with shar messages

User feedback/entertainment:
   -q, --quiet                do not output verbose messages
       --silent               an alias for the 'quiet' option

Version, usage and configuration options:
   -v, --version[=MODE]       output version information and exit
   -h, --help                 display extended usage information and exit
   -!, --more-help            extended usage information passed thru pager
   -R, --save-opts[=FILE]     save the option state to a config file FILE
   -r, --load-opts=FILE       load options from the config file FILE
                                - disabled with '--no-load-opts'
                                - may appear multiple times

Options are specified by doubled hyphens and their name or by a single hyphen and the flag character. If no files are specified, the list of input files is read from a standard input. Standard input must not be a terminal.

The following option preset mechanisms are supported: reading file $HOME/.sharrc.

shar creates “shell archives” (or shar files) which are in text format and can be emailed. These files may be unpacked later by executing them with /bin/sh. The resulting archive is sent to standard out unless the -o option is given. A wide range of features provide extensive flexibility in manufacturing shars and in specifying shar “smartness”. Archives may be fairly simple (--vanilla-operation) or essentially a mailable tar archive.

Options may be specified in any order until a file argument is recognized. If the --intermix-type option has been specified, more compression and encoding options will be recognized between the file arguments.

Though this program supports uuencode-d files, they are deprecated. If you are emailing files, please consider mime-encoded files. If you do uuencode, base64 is the preferred encoding method.

Please send bug reports to: bug-gnu-utils@gnu.org

📊 compression options

Specifying compression.

-p, --intermix-type Allow positional parameter options. The compression method and encoding method options may be intermixed with file names. Files named after these options will be processed in the specified way. Must not appear in combination with vanilla-operation. -C, --compactor=PROG Specify compaction (compression) program PROG. May appear multiple times. Must not appear in combination with vanilla-operation. The gzip, bzip2 and compress compactor commands may be specified by the program name as the option name, e.g. --gzip. Those options are deprecated. There is also the xz compactor now. Specify xz with -C xz or --compactor=xz. Specifying the compactor none will disable file compression. Compressed files are never processed as plain text; they are always uuencoded and the recipient must have uudecode to unpack them. Specifying the compactor compress is deprecated. -g, --level-of-compression=LEVEL Pass level for compression. Some compression programs allow for a level of compression. The default is 9, but this option allows you to specify something else. This value is used by gzip, bzip2 and xz, but not compress. -j, --bzip2 (deprecated) bzip2 compress and uuencode all files prior to packing. The recipient must have uudecode and bzip2 in order to unpack. May appear multiple times. NOTE: THIS OPTION IS DEPRECATED. -z, --gzip (deprecated) gzip compress and uuencode all files prior to packing. The recipient must have uudecode and gzip in order to unpack. May appear multiple times. NOTE: THIS OPTION IS DEPRECATED. -Z, --compress (deprecated) compress and uuencode all files prior to packing. The recipient must have uudecode and compress in order to unpack. Must be compiled in by defining HAVE_COMPRESS. NOTE: THIS OPTION IS DEPRECATED. --level-for-gzip An alias for the level-of-compression option. -b, --bits-per-code (deprecated) Pass bits (default 12) to compress. Must be compiled in by defining HAVE_COMPRESS. This is the compression factor used by the compress program. NOTE: THIS OPTION IS DEPRECATED.

🔤 encoding options

Specifying file encoding methodology. Files may be stored in the shar either as plain text or uuencoded. By default, the program selects which by examining the file. You may force the selection for all files. In intermixed option/file mode, this setting may be changed during processing.

-M, --mixed-uuencode Automatically determine if the files are text or binary and archive correctly. Files found to be binary are uuencoded prior to packing. This is the default behavior for shar.

For a file to be considered a text file instead of a binary file, all the following should be true:

  1. The file does not contain any ASCII control character besides <BS> (backspace), <HT> (horizontal tab), <LF> (new line) or <FF> (form feed).
  2. The file contains no character with its eighth-bit set.
  3. The file contains no line beginning with the five letters “from ”, capitalized or not. (Mail handling programs will often gratuitously insert a > character before it.)
  4. The file is either empty or ends with a <LF> (newline) byte.
  5. No line in the file contains more than 200 characters. For counting purpose, lines are separated by a <LF> (newline).
-B, --uuencode Use uuencode prior to packing all files. This increases the size of the archive. The recipient must have uudecode in order to unpack. Compressed files are always encoded. -T, --text-files If you have files with non-ascii bytes or text that some mail handling programs do not like, you may find difficulties. However, if you are using FTP or SSH/SCP, the non-conforming text files should be okay.

📁 in-out options

Specifying file selection and output modes.

-o, --output-prefix=PREFIX Save the archive to files prefix.01 thru prefix.nn instead of sending all output to standard out. Must be specified when the --whole-size-limit or --split-size-limit options are specified. When PREFIX contains a % character, PREFIX is then interpreted as a sprintf format, which should be able to display a single decimal number. When PREFIX does not contain such a % character, the string .%02d is internally appended. -l, --whole-size-limit=SIZE Limit the output file size to size bytes, but don’t split input files. If size is less than 1024, then it will be multiplied by 1024. The value may also be specified with a k, K, m or M suffix. The number is then multiplied by 1000, 1024, 1000000, or 1048576, respectively. 4M (4194304) is the maximum allowed. Must appear in combination with output-prefix. Unlike the split-size-limit option, this allows the recipient of the shar files to unpack them in any order. -L, --split-size-limit=SIZE Limit output file size to size bytes, splitting files if necessary. The allowed values are specified as with the --whole-size-limit option. Must appear in combination with output-prefix. The archive parts created with this option must be unpacked in the correct order. -I, --input-file-list=FILE This option causes file to be reopened as standard input. If no files are found on the input line, then standard input is read for input file names. Use of this option will prohibit input files from being listed on the command line. Input must be in a form similar to that generated by find, one filename per line. This switch is especially useful when the command line will not hold the list of files to be archived. If the --intermix-type option is specified on the command line, then the compression options may be included in the standard input on lines by themselves and no file name may begin with a hyphen.

For example:

{ echo --compact xz
   find . -type f -print | sort
} | shar -S -p -L50K -o /somewhere/big
-S, --stdin-file-list (deprecated) This is a no-op. It is a wrapper for --input-file-list=-. NOTE: THIS OPTION IS DEPRECATED.

📧 headers options

Controlling the shar headers.

-n, --archive-name=NAME Name of archive to be included in the subject header of the shar files. See the --net-headers option. -s, --submitter=WHO@WHERE shar will normally determine the submitter name by querying the system. Use this option if it is being done on behalf of another. -a, --net-headers Adds specialized email headers: Submitted-by: who@where and Archive-name: name/part##. The who@where is normally derived, but can be specified with the --submitter option. The name must be provided with the --archive-name option. Must appear in combination with archive-name. If the archive name includes a slash (/) character, then the /part## is omitted. Thus -n xyzzy produces xyzzy/part01, xyzzy/part02; while -n xyzzy/patch produces xyzzy/patch01, xyzzy/patch02; and -n xyzzy/patch01. produces xyzzy/patch01.01, xyzzy/patch01.02. -c, --cut-mark A line saying ‘Cut here’ is placed at the start of each output file. -t, --translate Translate messages in the script. If you have set the LANG environment variable, messages printed by shar will be in the specified language. The produced script will still be emitted using messages in the lingua franca of the computer world: English. This option will cause the script messages to appear in the languages specified by the LANG environment variable set when the script is produced.

đŸ›Ąī¸ xmit-defenses options

Protecting against transmission issues.

--no-character-count Do NOT check each file with wc -c after unpack. The default is to check. -D, --no-md5-digest Do not use md5sum digest to verify the unpacked files. The default is to check. -F, --force-prefix Forces the prefix character to be prepended to every line, even if not required. This option may slightly increase the size of the archive, especially if --uuencode or a compression option is used. -d, --here-delimiter=DELIM Use DELIM to delimit the files in the shar instead of SHAR_EOF. This is for those who want to personalize their shar files. The delimiter will always be prefixed and suffixed with underscores.

đŸĻ shar-flavors options

Producing different kinds of shars.

-V, --vanilla-operation This option produces vanilla shars which rely only upon the existence of echo, test and sed in the unpacking environment. It changes the default behavior from mixed mode (--mixed-uuencode) to text mode (--text-files). Warnings are produced if options are specified that will require decompression or decoding in the unpacking environment. -P, --no-piping In the shar file, use a temporary file to hold file contents between unpacking stages instead of using pipes. This option is mandatory when you know the unpacking will happen on systems that do not support pipes. -x, --no-check-existing Create the archive so that when processed it will overwrite existing files without checking first. If neither this option nor the --query-user option is specified, the unpack will not overwrite pre-existing files. In all cases, however, if --cut-mark is passed as a parameter to the script when unpacking, then existing files will be overwritten unconditionally. sh shar-archive-file -c -X, --query-user When unpacking, interactively ask the user if files should be overwritten. Do not use for shars submitted to the net. Must not appear in combination with vanilla-operation. Use of this option produces shars which will cause problems with some unshar-style procedures, particularly when used together with vanilla mode (--vanilla-operation). Use this feature mainly for archives to be passed among agreeable parties. -X is not for shell archives which are to be submitted to Usenet or other public networks. shar will try to detect if /dev/tty exists at the receiving site and will use it to read user replies. But this does not work in all cases. -m, --no-timestamp Avoid generating touch commands to restore the file modification dates when unpacking files from the archive. When file modification times are not preserved, project build programs like “make” will see built files older than the files they get built from. -Q, --quiet-unshar Verbose OFF. Disables the inclusion of comments to be output when the archive is unpacked. -f, --basename Restore by the base file name only, rather than path. This option causes only file names to be used, which is useful when building a shar from several directories, or another directory. Note that if a directory name is passed to shar, the substructure of that directory will be restored whether this option is specified or not.

🌐 internationalization options

Internationalization options.

--no-i18n Do not produce internationalized shell archives, use default English messages. By default, shar produces archives that will try to output messages in the unpackers preferred language (as determined by the LANG/LC_MESSAGES environmental variables) when they are unpacked. If no message file for the unpackers language is found at unpack time, messages will be in English. --print-text-domain-dir Prints the directory shar looks in to find messages files for different languages, then immediately exits.

đŸ’Ŧ feedback options

User feedback/entertainment.

-q, --quiet Omit progress messages. --silent An alias for the quiet option.

âš™ī¸ presetting/configuring shar

Any option that is not marked as not presettable may be preset by loading values from configuration (“rc” or “ini”) files.

libopts will search in $HOME for configuration (option) data. The environment variable HOME is expanded and replaced when the program runs. If this is a plain file, it is simply processed. If it is a directory, then a file named .sharrc is searched for within that directory.

Configuration files may be in a wide variety of formats. The basic format is an option name followed by a value (argument) on the same line. Values may be separated from the option name with a colon, equal sign or simply white space. Values may be continued across multiple lines by escaping the newline with a backslash.

Multiple programs may also share the same initialization file. Common options are collected at the top, followed by program specific segments. The segments are separated by lines like: [SHAR] or by <?program shar>. Do not mix these styles within one configuration file.

Compound values and carefully constructed string values may also be specified using XML syntax:

<option-name>
   <sub-opt>...&lt;...&gt;...</sub-opt>
</option-name>

yielding an option-name.sub-opt string value of "...<...>...". AutoOpts does not track suboptions. You simply note that it is a hierarchically valued option. AutoOpts does provide a means for searching the associated name/value pair list (see: optionFindValue).

The command line options relating to configuration and/or usage help are:

-v, --version[=MODE] Print the program version to standard out, optionally with licensing information, then exit 0. The optional argument specifies how much licensing detail to provide. The default is to print the license name with the version. The licensing information may be selected with an option argument. Only the first letter of the argument is examined: -h, --help Display extended usage information and exit. -!, --more-help Extended usage information passed thru pager. -R, --save-opts[=FILE] Save the option state to a config file FILE. -r, --load-opts=FILE Load options from the config file FILE. Disabled with --no-load-opts. May appear multiple times.

đŸšĒ Exit Codes

CodeNameDescription
0EXIT_SUCCESSSuccessful program execution.
1EXIT_OPTION_ERRORThe command options were misconfigured.
2EXIT_FILE_NOT_FOUNDA specified input could not be found.
3EXIT_CANNOT_OPENDIROpen/close of specified directory failed.
4EXIT_FAILEDResource limit/miscellaneous shar command failure.
63EXIT_BUGThere is a shar command bug. Please report it.
66EX_NOINPUTA specified configuration file could not be loaded.
70EX_SOFTWARElibopts had an internal operational error. Please report it to autogen-users@lists.net. Thank you.

đŸ‘Ĩ Authors

The shar and unshar programs are the collective work of many authors. Many people contributed by reporting problems, suggesting various improvements or submitting actual code. A list of these people is in the THANKS file in the sharutils distribution.

🐛 Bugs

Please put sharutils in the subject line for emailed bug reports. It helps to spot the message.

📝 Examples

The first shows how to make a shell archive out of all C program sources. The second produces a shell archive with all .c and .h files, which unpacks silently. The third gives a shell archive of all uuencoded .arc files, into numbered files starting from arc.sh.01. The last example gives a shell archive which will use only the file names at unpack time.

shar *.c > cprog.shar
shar -Q *.[ch] > cprog.shar
shar -B -l28 -oarc.sh *.arc
shar -f /lcl/src/u*.c > u.sh

âš ī¸ Warnings

No attempt is made to restore the protection and modification dates for directories, even if this is done by default for files. Thus, if a directory is given to shar, the protection and modification dates of corresponding unpacked directory may not match those of the original.

If a directory is passed to shar, it may be scanned more than once, to conserve memory. Therefore, do not change the directory contents while shar is running.

Be careful that the output file(s) are not included in the inputs or shar may loop until the disk fills up. Be particularly careful when a directory is passed to shar that the output files are not in that directory or a subdirectory of it.

Use of the compression and encoding options will slow the archive process, perhaps considerably.

Use of the --query-user produces shars which will cause problems with many unshar procedures. Use this feature only for archives to be passed among agreeable parties. Certainly, query-user is NOT for shell archives which are to be distributed across the net. The use of compression in net shars will cause you to be flamed off the earth. Not using the --no-timestamp or --force-prefix options may also get you occasional complaints. Put these options into your ~/.sharrc file.

📚 See Also

unshar(1)

shar
đŸ“Ļ Invoking shar 🚀 Quick Reference
📋 Menu â„šī¸ shar help/usage (--help) 📊 compression options 🔤 encoding options 📁 in-out options 📧 headers options đŸ›Ąī¸ xmit-defenses options đŸĻ shar-flavors options 🌐 internationalization options đŸ’Ŧ feedback options âš™ī¸ presetting/configuring shar đŸšĒ Exit Codes đŸ‘Ĩ Authors 🐛 Bugs 📝 Examples âš ī¸ Warnings 📚 See Also

Generated by phpman v4.9.26-1-g511901d · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-07-31 04:56 @216.73.217.152
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 Transitional!Valid CSS!
Enhanced by LLM: deepseek-v4-flash / taotoken.net / www.chedong.com - original format

^_top_^