# phpman > man > shar(1)

> **TLDR:** Create a shell archive.
>
- Create a shell script that when executed extracts the given files from itself:
  `shar {{path/to/file1 path/to/file2 ...}} > {{path/to/archive.sh}}`

*Source: tldr-pages*

---

[shar(1)](https://www.chedong.com/phpMan.php/man/shar/1/markdown)                                     User Commands                                    [shar(1)](https://www.chedong.com/phpMan.php/man/shar/1/markdown)



## NAME
       **shar** - create a shell archive

## SYNOPSIS
       **shar** [**-flags**] [**-flag** [_value_]] [**--option-name**[[=| ]_value_]] [<file>...]

       If no _file_s are specified, the list of input files is read from standard input.  Standard in‐
       put must not be a terminal.

## DESCRIPTION
       **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  exten‐
       sive  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  **--inter**‐‐
       **mix-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 en‐
       coding method.

## OPTIONS
### Specifying compression
### -p --intermix-type
              specify compression for input files.  This option must not appear in combination  with
              any of the following options: vanilla-operation.

              Allow  positional  parameter  options.  The compression method and encoding method op‐
              tions may be intermixed with file names.  Files named after these options will be pro‐
              cessed in the specified way.

### -C --compactor
              specify  compaction (compression) program.  This option may appear an unlimited number
              of times.  This option must not appear in combination with any of  the  following  op‐
              tions: 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, however, are being 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
              pass _LEVEL_ for compression.  This option takes an integer number as its argument.  The
              value of _level_ is constrained to being:
                  in the range  1 through 9
              The default _level_ for this option is:
                   9

              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
              **bzip2** and **uuencode** files.  This option may appear an unlimited number of times.

              **bzip2** compress and **uuencode** all files prior to packing.  The recipient must have **uude**‐‐
              **code** **bzip2** in order to unpack.

              **NOTE:** **THIS** **OPTION** **IS** **DEPRECATED**

### -z --gzip
              **gzip** and **uuencode** files.  This option may appear an unlimited number of times.

              **gzip** compress and **uuencode** all files prior to packing.  The recipient must have **uude**‐‐
              **code** and **gzip** in order to unpack.

              **NOTE:** **THIS** **OPTION** **IS** **DEPRECATED**

### -Z --compress
              **compress** and **uuencode** files.  This option may appear an unlimited number of times.

              **compress** and **uuencode** all files prior to packing.  The recipient must have **uudecode**
              and **compress** in order to unpack.

              **NOTE:** **THIS** **OPTION** **IS** **DEPRECATED**

### --level-for-gzip
              This is an alias for the _--level-of-compression_ option.

              **NOTE:** **THIS** **OPTION** **IS** **DEPRECATED**

### -b --bits-per-code
              pass _bits_ (default 12) to compress.  The default _bits_ for this option is:
                   12

              This is the compression factor used by the **compress** program.

              **NOTE:** **THIS** **OPTION** **IS** **DEPRECATED**

### 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 inter‐
       mixed option/file mode, this setting may be changed during processing.

### -M --mixed-uuencode
              decide uuencoding for each file.  This option is a member of the mixed-uuencode class
              of options.

              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:

              The file does not contain any ASCII control character besides _BS_ (backspace), _HT_ (hor‐
              izontal tab), _LF_ (new line) or _FF_ (form feed).

              The file contains no character with its eighth-bit set.

              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.)

              The file is either empty or ends with a _LF_ (newline) byte.

              No line in the file contains more than 200 characters.  For counting purpose, lines
              are separated by a _LF_ (newline).

### -B --uuencode
              treat all files as binary.  This option is a member of the mixed-uuencode class of op‐
              tions.

              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
              treat all files as text.  This option is a member of the mixed-uuencode class of op‐
              tions.

              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.

### Specifying file selection and output modes
### -o --output-prefix
              print output to file PREFIX.nn.

              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** op‐
              tions 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
              split archive, not files, to _size_.  This option is a member of the whole-size-limit
              class of options.  This option must appear in combination with the following options:
              output-prefix.  This option takes an integer number as its argument.  The value of
              _size_ is constrained to being:
                  in the range  8 through 1023, or
                  in the range  8192 through 4194304

              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.

              Unlike the **split-size-limit** option, this allows the recipient of the shar files to un‐
              pack them in any order.

### -L --split-size-limit
              split archive or files to _size_.  This option is a member of the whole-size-limit class
              of options.  This option must appear in combination with the following options: out‐
              put-prefix.  This option takes an integer number as its argument.  The value of _size_
              is constrained to being:
                  in the range  8 through 1023, or
                  in the range  8192 through 4194304

              Limit output file size to _size_ bytes, splitting files if necessary.  The allowed val‐
              ues are specified as with the **--whole-size-limit** option.

              The archive parts created with this option must be unpacked in the correct order.  If
              the recipient of the shell archives wants to put all of them in a single email folder
              (file), they will have to be saved in the correct order for **unshar** to unpack them all
              at once (using one of the split archive options).  see: unshar Invocation.

### -I --input-file-list
              read file list from a 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
              read file list from standard input.

              This option is actually a no-op.  It is a wrapper for **--input-file-list=-**.

              **NOTE:** **THIS** **OPTION** **IS** **DEPRECATED**

### Controlling the shar headers
### -n --archive-name
              use _name_ to document the archive.

              Name of archive to be included in the subject header of the shar files.  See the
              **--net-headers** option.

### -s --submitter
              override the submitter name.

              **shar** will normally determine the submitter name by querying the system.  Use this op‐
              tion if it is being done on behalf of another.

### -a --net-headers
              output Submitted-by: & Archive-name: headers.  This option must appear in combination
              with the following options: archive-name.

              Adds specialized email headers:
                  Submitted-by: _who@@where_
                  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.  If the archive name in‐
              cludes 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
              start the shar with a cut line.

              A line saying 'Cut here' is placed at the start of each output file.

### -t --translate
              translate messages in the script.

              Translate messages in the script.  If you have set the **LANG** environment variable, mes‐
              sages 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.

### Protecting against transmission issues
### --no-character-count
              do not use `wc -c' to check size.

              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.

              Do _not_ use **md5sum** digest to verify the unpacked files.  The default is to check.

### -F --force-prefix
              apply the prefix character on every line.

              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
              use _delim_ to delimit the files.  The default _delim_ for this option is:
                   SHAR_EOF

              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 suf‐
              fixed with underscores.

### Producing different kinds of shars
### -V --vanilla-operation
              produce very simple shars.

              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 de‐
              compression or decoding in the unpacking environment.

### -P --no-piping
              use temporary files between programs.

              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
              blindly overwrite existing files.

              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 over‐
              written unconditionally.

                  sh shar-archive-file -c

### -X --query-user
              ask user before overwriting files.  This option must not appear in combination with
              any of the following options: vanilla-operation.

              When unpacking, interactively ask the user if files should be overwritten.  Do not use
              for shars submitted to the net.

              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.  Certainly,
              **-X** is _not_ for shell archives which are to be submitted to Usenet or other public net‐
              works.

              The problem is that **unshar** programs or procedures often feed _/bin/sh_ from its standard
              input, thus putting _/bin/sh_ and the shell archive script in competition for input
              lines.  As an attempt to alleviate this problem, **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, it may happen that the receiving user will have to avoid using **un**‐‐
              **shar** programs or procedures, and call _/bin/sh_ directly.  In vanilla mode, using
              _/dev/tty_ is not even attempted.

### -m --no-timestamp
              do not restore modification times.

              Avoid generating 'touch' commands to restore the file modification dates when unpack‐
              ing 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.  This is why, when this
              option is not used, a special effort is made to restore timestamps.

### -Q --quiet-unshar
              avoid verbose messages at unshar time.

              Verbose OFF.  Disables the inclusion of comments to be output when the archive is un‐
              packed.

### -f --basename
              restore in one directory, despite hierarchy.

              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
### --no-i18n
              do not internationalize.

              Do not produce internationalized shell archives, use default English messages.  By de‐
              fault, shar produces archives that will try to output messages in the unpackers pre‐
              ferred 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
              print directory with shar messages.

              Prints the directory shar looks in to find messages files for different languages,
              then immediately exits.

### User feedback/entertainment
### -q --quiet
              do not output verbose messages.

              omit progress messages.

### --silent
              This is an alias for the _--quiet_ option.

### -h --help
              Display usage information and exit.

       **-!**, **--more-help**
              Pass the extended usage information through a pager.

### -R --save-opts
              Save the option state to _cfgfile_.  The default is the _last_ configuration file listed
              in the **OPTION** **PRESETS** section, below.  The command will exit after updating the config
              file.

### -r --load-opts --no-load-opts
              Load options from _cfgfile_.  The _no-load-opts_ form will disable the loading of earlier
              config/rc/ini files.  _--no-load-opts_ is handled early, out of order.

### -v --version
              Output version of program and exit.  The default mode is `v', a simple version.  The
              `c' mode will print copyright information and `n' will print the full copyright no‐
              tice.

## OPTION PRESETS
       Any option that is not marked as _not_ _presettable_ may be preset by loading values from config‐
       uration ("RC" or ".INI") file(s).  The file "_$HOME/.sharrc_" will be used, if present.

## 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 consider‐
       ably.

       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-time**‐‐
       **stamp** or **--force-prefix** options may also get you occasional complaints.  Put these options
       into your _~/.sharrc_ file.

## FILES
       See **OPTION** **PRESETS** for configuration files.

## EXAMPLES
       The first shows how to make a shell archive out of all C program sources.  The second pro‐
       duces 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

## EXIT STATUS
       One of the following exit values will be returned:

       0  (EXIT_SUCCESS)
              Successful program execution.

       1  (EXIT_OPTION_ERROR)
              The command options were misconfigured.

       2  (EXIT_FILE_NOT_FOUND)
              a specified input could not be found

       3  (EXIT_CANNOT_OPENDIR)
              open/close of specified directory failed

       4  (EXIT_FAILED)
              Resource limit/miscelleaneous shar command failure

       63  (EXIT_BUG)
              There is a shar command bug.  Please report it.

       66  (EX_NOINPUT)
              A specified configuration file could not be loaded.

       70  (EX_SOFTWARE)
              libopts had an internal operational error.  Please report it to autogen-
              <users@lists.sourceforge.net>.  Thank you.

## SEE ALSO
       [unshar(1)](https://www.chedong.com/phpMan.php/man/unshar/1/markdown)

## AUTHORS
       The _shar_ and _unshar_ programs is 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.

## COPYRIGHT
       Copyright (C) 1994-2015 Free Software Foundation, Inc. all rights reserved.  This program is
       released under the terms of the GNU General Public License, version 3 or later.

## BUGS
       Please put **sharutils** in the subject line for emailed bug reports.  It helps to spot the mes‐
       sage.

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

## NOTES
       This manual page was _AutoGen_-erated from the **shar** option definitions.



GNU sharutils (4.15.2)                       30 May 2015                                     [shar(1)](https://www.chedong.com/phpMan.php/man/shar/1/markdown)
