Provided by: netcdf-bin_4.9.0-3_amd64 bug

NAME

       nccopy  -  Copy a netCDF file, optionally changing format, compression, or chunking in the
       output.

SYNOPSIS

       nccopy [-k  kind_name ] [-kind_code] [-d  n ] [-s] [-c   chunkspec  ]  [-u]  [-w]  [-[v|V]
              var1,...]   [-[g|G] grp1,...]  [-m  bufsize ] [-h  chunk_cache ] [-e  cache_elems ]
              [-r] [-F  filterspec ] [-L  n ] [-M  n ]  infile  outfile

DESCRIPTION

       The nccopy utility copies an input netCDF file in  any  supported  format  variant  to  an
       output  netCDF  file,  optionally  converting  the  output to any compatible netCDF format
       variant, compressing the data, or rechunking the data.  For example,  if  built  with  the
       netCDF-3  library,  a  netCDF  classic  file may be copied to a netCDF 64-bit offset file,
       permitting larger variables.  If built with the netCDF-4 library, a  netCDF  classic  file
       may  be  copied to a netCDF-4 file or to a netCDF-4 classic model file as well, permitting
       data compression, efficient schema changes,  larger  variable  sizes,  and  use  of  other
       netCDF-4 features.

       If  no output format is specified, with either -k kind_name or -kind_code, then the output
       will use the same format as the input, unless the input is classic or  64-bit  offset  and
       either  chunking  or  compression  is specified, in which case the output will be netCDF-4
       classic model format.  Attempting some kinds of format conversion will result in an error,
       if  the  conversion is not possible.  For example, an attempt to copy a netCDF-4 file that
       uses features of the enhanced model, such as groups or variable-length strings, to any  of
       the other kinds of netCDF formats that use the classic model will result in an error.

       nccopy  also  serves as an example of a generic netCDF-4 program, with its ability to read
       any valid netCDF file and handle nested groups, strings, and user-defined types, including
       arbitrarily  nested  compound types, variable-length types, and data of any valid netCDF-4
       type.

       If DAP support was enabled when nccopy was built, the file name may  specify  a  DAP  URL.
       This may be used to convert data on DAP servers to local netCDF files.

OPTIONS

        -k   kind_name
              Use  format  name  to specify the kind of file to be created and, by inference, the
              data  model  (i.e.  netcdf-3  (classic)  or  netcdf-4  (enhanced)).   The  possible
              arguments are:

                     'nc3' or 'classic' => netCDF classic format

                     'nc6' or '64-bit offset' => netCDF 64-bit format

                     'nc4' or 'netCDF-4' => netCDF-4 format (enhanced data model)

                     'nc7' or 'netCDF-4 classic model' => netCDF-4 classic model format

              Note:  The  old  format  numbers '1', '2', '3', '4', equivalent to the format names
              'nc3', 'nc6', 'nc4', or 'nc7' respectively, are also still accepted but deprecated,
              due to easy confusion between format numbers and format names.

       [-kind_code]
              Use  format numeric code (instead of format name) to specify the kind of file to be
              created and, by inference, the data model (i.e. netcdf-3 (classic) versus  netcdf-4
              (enhanced)).  The numeric codes are:

                     3 => netcdf classic format

                     6 => netCDF 64-bit format

                     4 => netCDF-4 format (enhanced data model)

                     7 => netCDF-4 classic model format
       The numeric code "7" is used because "7=3+4", specifying the format that uses the netCDF-3
       data model for compatibility with the netCDF-4 storage format for performance.  Credit  is
       due to NCO for use of these numeric codes instead of the old and confusing format numbers.

        -d   n
              For  netCDF-4  output,  including  netCDF-4  classic model, specify deflation level
              (level of compression) for variable data output.  0 corresponds to  no  compression
              and  9  to  maximum  compression,  with  higher  levels  of  compression  requiring
              marginally more time to compress or uncompress than lower levels. As a side  effect
              specifying  a  compression  level  of  0  (via "-d 0") actually turns off deflation
              altogether.  Compression achieved may also depend on  output  chunking  parameters.
              If  this  option  is  specified  for a classic format or 64-bit offset format input
              file, it is not necessary to also  specify  that  the  output  should  be  netCDF-4
              classic  model,  as  that will be the default.  If this option is not specified and
              the input file has compressed variables, the compression will still be preserved in
              the output, using the same chunking as in the input by default.

              Note that nccopy requires all variables to be compressed using the same compression
              level, but the API has no such restriction.   With  a  program  you  can  customize
              compression for each variable independently.

        -s    For  netCDF-4  output,  including  netCDF-4  classic  model,  specify  shuffling of
              variable data bytes before compression or after decompression.  Shuffling refers to
              interlacing  of  bytes  in  a  chunk  so  that  the  first  bytes of all values are
              contiguous in storage, followed by all the second bytes, and  so  on,  which  often
              improves  compression.  This option is ignored unless a non-zero deflation level is
              specified.  Using -d0  to  specify  no  deflation  on  input  data  that  has  been
              compressed and shuffled turns off both compression and shuffling in the output.

        -u    Convert  any unlimited size dimensions in the input to fixed size dimensions in the
              output.  This can speed up variable-at-a-time access, but  slow  down  record-at-a-
              time access to multiple variables along an unlimited dimension.

        -w    Keep  output in memory (as a diskless netCDF file) until output is closed, at which
              time output file is written to disk.  This can greatly speedup operations  such  as
              converting  unlimited dimension to fixed size (-u option), chunking, rechunking, or
              compressing the input.  It requires that available memory is large enough  to  hold
              the  output  file.  This option may provide a larger speedup than careful tuning of
              the -m, -h, or -e options, and it's certainly a lot simpler.

        -c  chunkspec
              For  netCDF-4  output,  including  netCDF-4   classic   model,   specify   chunking
              (multidimensional  tiling)  for  variable  data  in  the output.  This is useful to
              specify the units of disk access, compression, or other filters such as  checksums.
              Changing the chunking in a netCDF file can also greatly speedup access, by choosing
              chunk shapes that are appropriate for the most common access patterns.

              The chunkspec  argument  has  several  forms.  The  first  form  is  the  original,
              deprecated  form and is a string of comma-separated associations, each specifying a
              dimension name, a '/' character, and optionally the corresponding chunk length  for
              that  dimension.   No blanks should appear in the chunkspec string, except possibly
              escaped blanks that are part of a dimension name.  A chunkspec names at  least  one
              dimension,  and  may  omit  dimensions which are not to be chunked or for which the
              default chunk length is desired.   If  a  dimension  name  is  followed  by  a  '/'
              character  but  no subsequent chunk length, the actual dimension length is assumed.
              If copying a classic model file to a  netCDF-4  output  file  and  not  naming  all
              dimensions  in the chunkspec, unnamed dimensions will also use the actual dimension
              length for the chunk length.  An example of a chunkspec for variables that use  'm'
              and  'n' dimensions might be 'm/100,n/200' to specify 100 by 200 chunks. To see the
              chunking resulting from copying with a chunkspec, use the '-s' option of ncdump  on
              the output file.

              The  chunkspec  '/'  that omits all dimension names and corresponding chunk lengths
              specifies that no chunking is to occur in the output, so can be used to unchunk all
              the  chunked  variables.   To  see  the  chunking  resulting  from  copying  with a
              chunkspec, use the '-s' option of ncdump on the output file.

              As an I/O optimization, nccopy has a threshold for the minimum size  of  non-record
              variables  that  get  chunked,  currently  8192  bytes.  The -M flag can be used to
              override this value.

              Note that nccopy requires variables that share a dimension to also share the  chunk
              size  associated  with  that  dimension,  but the programming interface has no such
              restriction.  If you need to customize chunking for  variables  independently,  you
              will  need  to  use the second form of chunkspec. This second form of chunkspec has
              this syntax:  var:n1,n2,...,nn . This assumes that the  variable  named  "var"  has
              rank  n.  The chunking to be applied to each dimension of the variable is specified
              by the values of n1 through nn. This second form of chunking specification  can  be
              repeated  multiple times to specify the exact chunking for different variables.  If
              the variable is specified but no chunk sizes are specified (i.e.  -c  var:  )  then
              chunking  is  disabled  for  that variable.  If the same variable is specified more
              than once, the second and later specifications  are  ignored.   Also,  this  second
              form,  per-variable  chunking,  takes  precedence  over  any per-dimension chunking
              except the bare "/" case.

              The third form of the chunkspec has the syntax:   var:compact  or   var:contiguous.
              This explicitly attempts to set the variable storage type as compact or contiguous,
              respectively. These may be overridden if other flags require  the  variable  to  be
              chunked.

        -v   var1,...
              The output will include data values for the specified variables, in addition to the
              declarations of all dimensions, variables, and attributes. One  or  more  variables
              must  be  specified  by name in the comma-delimited list following this option. The
              list must be a single argument to  the  command,  hence  cannot  contain  unescaped
              blanks  or  other  white space characters. The named variables must be valid netCDF
              variables in the input-file. A variable within a group in a netCDF-4  file  may  be
              specified  with  an  absolute  path  name, such as "/GroupA/GroupA2/var".  Use of a
              relative path name such as 'var' or "grp/var" specifies all matching variable names
              in  the file.  The default, without this option, is to include data values for  all
              variables in the output.

        -V   var1,...
              The output will include the specified variables only but all dimensions and  global
              or  group attributes. One or more variables must be specified by name in the comma-
              delimited list following this option. The list must be a  single  argument  to  the
              command, hence cannot contain unescaped blanks or other white space characters. The
              named variables must be valid netCDF variables in the input-file. A variable within
              a  group  in  a  netCDF-4 file may be specified with an absolute path name, such as
              '/GroupA/GroupA2/var'.  Use of a relative path name  such  as  'var'  or  'grp/var'
              specifies  all  matching  variable  names  in  the file.  The default, without this
              option, is to include  all  variables in the output.

        -g   grp1,...
              The output will include data values only for the specified  groups.   One  or  more
              groups must be specified by name in the comma-delimited list following this option.
              The list must be a single argument to the command. The named groups must  be  valid
              netCDF  groups  in  the input-file. The default, without this option, is to include
              data values for all groups in the output.

        -G   grp1,...
              The output will include only the specified groups.  One  or  more  groups  must  be
              specified  by name in the comma-delimited list following this option. The list must
              be a single argument to the command. The named groups must be valid  netCDF  groups
              in  the  input-file.  The default, without this option, is to include all groups in
              the output.

        -m   bufsize
              An integer or floating-point number that specifies the size, in bytes, of the  copy
              buffer used to copy large variables.  A suffix of K, M, G, or T multiplies the copy
              buffer size by one thousand, million,  billion,  or  trillion,  respectively.   The
              default  is 5 Mbytes, but will be increased if necessary to hold at least one chunk
              of netCDF-4 chunked variables in the input file.  You may want to specify  a  value
              larger  than the default for copying large files over high latency networks.  Using
              the '-w' option may provide better performance, if the output fits in memory.

        -h   chunk_cache
              For netCDF-4 output, including netCDF-4 classic model, an integer or floating-point
              number  that  specifies the size in bytes of chunk cache allocated for each chunked
              variable.  This is not a property of the file,  but  merely  a  performance  tuning
              parameter  for  avoiding  compressing or decompressing the same data multiple times
              while copying and changing chunk shapes.  A suffix of K, M, G, or T multiplies  the
              chunk cache size by one thousand, million, billion, or trillion, respectively.  The
              default is 4.194304 Mbytes  (or  whatever  was  specified  for  the  configure-time
              constant  CHUNK_CACHE_SIZE when the netCDF library was built).  Ideally, the nccopy
              utility should accept only one memory buffer size and divide it optimally between a
              copy  buffer  and  chunk  cache, but no general algorithm for computing the optimum
              chunk cache size has been implemented yet. Using the '-w' option may provide better
              performance, if the output fits in memory.

        -e   cache_elems
              For  netCDF-4  output, including netCDF-4 classic model, specifies number of chunks
              that the chunk cache can hold. A suffix of K, M, G, or T multiplies the  number  of
              chunks  that  can  be  held  in  the  cache  by  one thousand, million, billion, or
              trillion, respectively.  This  is  not  a  property  of  the  file,  but  merely  a
              performance  tuning  parameter  for  avoiding compressing or decompressing the same
              data multiple times while copying and changing chunk shapes.  The default  is  1009
              (or  whatever was specified for the configure-time constant CHUNK_CACHE_NELEMS when
              the netCDF library was built).  Ideally, the nccopy  utility  should  determine  an
              optimum  value  for  this  parameter,  but  no  general algorithm for computing the
              optimum number of chunk cache elements has been implemented yet.

        -r    Read netCDF classic or 64-bit offset input file into  a  diskless  netCDF  file  in
              memory  before  copying.   Requires  that  input  file  be small enough to fit into
              memory.  For nccopy, this doesn't seem to provide any significant speedup,  so  may
              not be a useful option.

        -L  n Set the log level; only usable if nccopy supports netCDF-4 (enhanced).

        -M  n Set the minimum chunk size; only usable if nccopy supports netCDF-4 (enhanced).

        -F  filterspec
              For netCDF-4 output, including netCDF-4 classic model, specify a filter to apply to
              a specified  set  of  variables  in  the  output.  As  a  rule,  the  filter  is  a
              compression/decompression  algorithm  with  a unique numeric identifier assigned by
              the HDF Group (see https://support.hdfgroup.org/services/filters.html).

              The filterspec argument has this general form.
              fqn1|fqn2...,filterid,param1,param2...paramn or *,filterid,param1,param2...paramn
       An fqn (fully qualified name) is the name of a variable prefixed by its containing  groups
       with  the  group  names separated by forward slash ('/').  An example might be /g1/g2/var.
       Alternatively, just the variable name can be given if it is in the root group:  e.g.  var.
       Backslash  escapes  may be used as needed.  A note of warning: the '|' separator is a bash
       reserved character, so you will probably need to put the  filter  spec  in  some  kind  of
       quotes or otherwise escape it.

              The  filterid  is  an unsigned positive integer representing the id assigned by the
              HDFgroup to the filter. Following the id is a sequence of parameters  defining  the
              operation of the filter. Each parameter is a 32-bit unsigned integer.

              This parameter may be repeated multiple times with different variable names.

EXAMPLES

       Make  a  copy of foo1.nc, a netCDF file of any type, to foo2.nc, a netCDF file of the same
       type:

              nccopy foo1.nc foo2.nc

       Note that the above copy will not be as fast as use of cp or other  simple  copy  utility,
       because  the  file is copied using only the netCDF API.  If the input file has extra bytes
       after the end of the netCDF  data,  those  will  not  be  copied,  because  they  are  not
       accessible  through the netCDF interface.  If the original file was generated in "No fill"
       mode so that fill values are not stored for padding for data alignment,  the  output  file
       may have different padding bytes.

       Convert a netCDF-4 classic model file, compressed.nc, that uses compression, to a netCDF-3
       file classic.nc:

              nccopy -k classic compressed.nc classic.nc

       Note that 'nc3' could be used instead of 'classic'.

       Download the variable 'time_bnds' and its associated attributes from an OPeNDAP server and
       copy the result to a netCDF file named 'tb.nc':

              nccopy 'http://test.opendap.org/opendap/data/nc/sst.mnmean.nc.gz?time_bnds' tb.nc

       Note  that URLs that name specific variables as command-line arguments should generally be
       quoted, to avoid the shell interpreting special characters such as '?'.

       Compress all the variables in the input file foo.nc, a netCDF file of  any  type,  to  the
       output file bar.nc:

              nccopy -d1 foo.nc bar.nc

       If  foo.nc  was  a classic or 64-bit offset netCDF file, bar.nc will be a netCDF-4 classic
       model netCDF file, because the classic and 64-bit offset  format  variants  don't  support
       compression.   If  foo.nc was a netCDF-4 file with some variables compressed using various
       deflation levels, the output will also be a netCDF-4 file of the same type,  but  all  the
       variables, including any uncompressed variables in the input, will now use deflation level
       1.

       Assume the input data includes gridded variables that use time, lat, lon dimensions,  with
       1000  times  by 1000 latitudes by 1000 longitudes, and that the time dimension varies most
       slowly.  Also assume that users want quick access to data at all times for a small set  of
       lat-lon points.  Accessing data for 1000 times would typically require accessing 1000 disk
       blocks, which may be slow.

       Reorganizing the data into chunks on disk that have all the time in each chunk for  a  few
       lat  and  lon  coordinates  would  greatly speed up such access.  To chunk the data in the
       input file slow.nc, a netCDF file of any type, to the output file fast.nc, you could use;

              nccopy -c time/1000,lat/40,lon/40 slow.nc fast.nc

       to specify data chunks of 1000 times, 40 latitudes, and 40 longitudes.  If you had  enough
       memory  to  contain  the  output  file,  you  could  speed  up  the  rechunking  operation
       significantly by creating the output in memory before writing it to disk on  close  (using
       the -w flag):

              nccopy -w -c time/1000,lat/40,lon/40 slow.nc fast.nc
       Alternatively,  one  could  write  this  using  the  alternate, variable-specific chunking
       specification and assuming that times, lat, and lon are variables.

              nccopy -c time:1000 -c lat:40 -c lon:40 slow.nc fast.nc

Chunking Rules

       The complete set of chunking rules is captured here.  As  a  rough  summary,  these  rules
       preserve  all  chunking  properties  from  the input file. These rules apply only when the
       selected output format supports chunking, i.e. for the netcdf-4 variants.

       The variable specific chunking specification should be obvious and translates directly  to
       the corresponding "nc_def_var_chunking" API call.

       The original per-dimension, chunking specification requires some interpretation by nccopy.
       The following rules are applied in the given order independently for each variable  to  be
       copied from input to output. The rules are written assuming we are trying to determine the
       chunking for a given output variable Vout that comes from an input variable Vin.

       1.     If there is no '-c' option that applies to a variable and the  corresponding  input
              variable is contiguous or the input is some netcdf-3 variant, then let the netcdf-c
              library make all chunking decisions.

       2.     For each dimension of Vout explicitly specified on the command line (using the '-c'
              option),  apply the chunking value for that dimension regardless of input format or
              input properties.

       3.     For dimensions of Vout not named on the command line in  a  '-c'  option,  preserve
              chunk sizes from the corresponding input variable, if it is chunked.

       4.     If Vin is contiguous, and none of its dimensions are named on the command line, and
              chunking is not mandated by other options, then make Vout be contiguous.

       5.     If the input variable is contiguous (or is some netcdf-3 variant) and there are  no
              options  requiring  chunking,  or  the  '/'  special  case  for  the '-c' option is
              specified, then the output variable V is marked as contiguous.

       6.     Final, default case: some or all chunk sizes are not determined by the command line
              or  the input variable. This includes the non-chunked input cases such as netcdf-3,
              cdf5, and DAP. In these cases retain all chunk sizes determined by previous  rules,
              and  use  the  full  dimension  size  as  the  default.  The exception is unlimited
              dimensions, where the default is 4 megabytes.

SEE ALSO

       ncdump(1),ncgen(1),netcdf(3)