1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-02-18 13:21:58 +02:00

split: add the --additional-suffix option

Add the --additional-suffix option, to append an
additional static suffix to output file names.

* src/split.c (next_file_name): Append suffix to output file names.
(main): Handle new --additional-suffix option.
* NEWS (New features): Mention it.
* doc/coreutils.texi (split invocation): Mention it.
* tests/split/additional-suffix: New file. Test --additional-suffix.
* tests/Makefile.am (TESTS): Add it.
Requested by Peng Yu, in bug 6554
This commit is contained in:
Jérémy Compostella
2012-02-19 13:52:47 +01:00
committed by Pádraig Brady
parent 7f48aa570d
commit 69fed0dfec
5 changed files with 77 additions and 3 deletions

3
NEWS
View File

@@ -10,6 +10,9 @@ GNU coreutils NEWS -*- outline -*-
split now accepts an optional "from" argument to --numeric-suffixes,
which changes the start number from the default of 0.
split now accepts the --additional-suffix option, to append an
additional static suffix to output file names.
** Bug fixes
mv now lets you move a symlink onto a same-inode destination file that

View File

@@ -3090,6 +3090,11 @@ Use suffixes of length @var{length}. The default @var{length} is 2.
Use digits in suffixes rather than lower-case letters. The numerical
suffix counts from @var{from} if specified, 0 otherwise.
@itemx --additional-suffix=@var{suffix}
@opindex --additional-suffix
Append an additional @var{suffix} to output file names. @var{suffix}
must not contain slash.
@item -e
@itemx --elide-empty-files
@opindex -e

View File

@@ -83,6 +83,9 @@ static char const *suffix_alphabet = "abcdefghijklmnopqrstuvwxyz";
/* Numerical suffix start value. */
static const char *numeric_suffix_start;
/* Additional suffix to append to output file names. */
static char const *additional_suffix;
/* Name of input file. May be "-". */
static char *infile;
@@ -113,7 +116,8 @@ enum
{
VERBOSE_OPTION = CHAR_MAX + 1,
FILTER_OPTION,
IO_BLKSIZE_OPTION
IO_BLKSIZE_OPTION,
ADDITIONAL_SUFFIX_OPTION
};
static struct option const longopts[] =
@@ -125,6 +129,8 @@ static struct option const longopts[] =
{"elide-empty-files", no_argument, NULL, 'e'},
{"unbuffered", no_argument, NULL, 'u'},
{"suffix-length", required_argument, NULL, 'a'},
{"additional-suffix", required_argument, NULL,
ADDITIONAL_SUFFIX_OPTION},
{"numeric-suffixes", optional_argument, NULL, 'd'},
{"filter", required_argument, NULL, FILTER_OPTION},
{"verbose", no_argument, NULL, VERBOSE_OPTION},
@@ -195,7 +201,8 @@ is -, read standard input.\n\
Mandatory arguments to long options are mandatory for short options too.\n\
"), stdout);
fprintf (stdout, _("\
-a, --suffix-length=N use suffixes of length N (default %d)\n\
-a, --suffix-length=N generate suffixes of length N (default %d)\n\
--additional-suffix=SUFFIX append an additional SUFFIX to file names.\n\
-b, --bytes=SIZE put SIZE bytes per output file\n\
-C, --line-bytes=SIZE put at most SIZE bytes of lines per output file\n\
-d, --numeric-suffixes[=FROM] use numeric suffixes instead of alphabetic.\n\
@@ -241,13 +248,16 @@ next_file_name (void)
/* Allocate and initialize the first file name. */
size_t outbase_length = strlen (outbase);
size_t outfile_length = outbase_length + suffix_length;
size_t addsuf_length = additional_suffix ? strlen (additional_suffix) : 0;
size_t outfile_length = outbase_length + suffix_length + addsuf_length;
if (outfile_length + 1 < outbase_length)
xalloc_die ();
outfile = xmalloc (outfile_length + 1);
outfile_mid = outfile + outbase_length;
memcpy (outfile, outbase, outbase_length);
memset (outfile_mid, suffix_alphabet[0], suffix_length);
if (additional_suffix)
memcpy (outfile_mid + suffix_length, additional_suffix, addsuf_length);
outfile[outfile_length] = 0;
sufindex = xcalloc (suffix_length, sizeof *sufindex);
@@ -1052,6 +1062,17 @@ main (int argc, char **argv)
}
break;
case ADDITIONAL_SUFFIX_OPTION:
if (last_component (optarg) != optarg)
{
error (0, 0,
_("invalid suffix %s, contains directory separator"),
quote (optarg));
usage (EXIT_FAILURE);
}
additional_suffix = optarg;
break;
case 'b':
if (split_type != type_undef)
FAIL_ONLY_ONE_WAY ();

View File

@@ -254,6 +254,7 @@ TESTS = \
misc/sort-NaN-infloop \
split/filter \
split/suffix-length \
split/additional-suffix \
split/b-chunk \
split/fail \
split/lines \

44
tests/split/additional-suffix Executable file
View File

@@ -0,0 +1,44 @@
#!/bin/sh
# show that 'split --additional-suffix=SUFFIX' works.
# Copyright (C) 2012 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/init.sh"; path_prepend_ ../src
print_ver_ split
printf '1\n2\n3\n4\n5\n' > in || framework_failure_
split --lines=2 --additional-suffix=.txt in > out || fail=1
cat <<\EOF > exp-1
1
2
EOF
cat <<\EOF > exp-2
3
4
EOF
cat <<\EOF > exp-3
5
EOF
compare exp-1 xaa.txt || fail=1
compare exp-2 xab.txt || fail=1
compare exp-3 xac.txt || fail=1
# Additional suffix must not contain slash
split --lines=2 --additional-suffix=a/b in 2>/dev/null > out && fail=1
Exit $fail