On 8/19/21 1:43 PM, Krzysztof Żelechowski wrote:
The command { gzip b; } fails because it would compress [a] without renaming
it.
The command { gzip -k b; } would not compress [a], so there is no reason to
fail.
There is a safety reason to fail. A naive user might do this: gzip -k b && gzip -cd b.gz >b which would trash the hard-linked file as well. There's a similar safety issue with symbolic links: $ ln -s a b $ touch a $ gzip -k b && gzip -cd b.gz >b gzip: b: Too many levels of symbolic linkswhere gzip's failure prevents the naive user from trashing the linked-to file.
Of course one can use -f to go ahead and compress anyway.Similar diagnostics say "file ignored" or "ignored", and that is clearer than saying "unchanged", so I installed the attached patch.
From 4b2f69227db5739b63e22a72f6db2b13972affb5 Mon Sep 17 00:00:00 2001 From: Paul Eggert <[email protected]> Date: Thu, 19 Aug 2021 14:26:38 -0700 Subject: [PATCH] gzip: clarify "other links" diagnostic * gzip.c (treat_file): Instead of saying "gzip: FOO has 1 other link -- unchanged", say "gzip: FOO has 1 other link -- file ignored". This is clearer when -k is also used (Bug#50097). --- gzip.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gzip.c b/gzip.c index 0123f82..f75b614 100644 --- a/gzip.c +++ b/gzip.c @@ -942,10 +942,10 @@ local void treat_file(iname) } if (2 <= istat.st_nlink) { - WARN ((stderr, "%s: %s has %lu other link%c -- unchanged\n", + WARN ((stderr, "%s: %s has %lu other link%s -- file ignored\n", program_name, ifname, (unsigned long int) istat.st_nlink - 1, - istat.st_nlink == 2 ? ' ' : 's')); + istat.st_nlink == 2 ? "" : "s")); close (ifd); return; } -- 2.30.2
