GNU bug report logs -
#9742
touch option for existence?
Previous Next
Reported by: Morty <morty+coreutils <at> frakir.org>
Date: Thu, 13 Oct 2011 01:52:01 UTC
Severity: normal
Tags: notabug
Done: Jim Meyering <jim <at> meyering.net>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Thu, 13 Oct 2011 15:37:42 +0200
with message-id <8739exc8rd.fsf <at> rho.meyering.net>
and subject line Re: bug#9742: touch option for existence?
has caused the debbugs.gnu.org bug report #9742,
regarding touch option for existence?
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
9742: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9742
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
[This is more of a feature request than a bug request. But I don't
see where I can make feature requests.]
It would be nice if touch had an option to only "touch" if the file
doesn't already exist. Sort of like -c, but the other way around.
This is useful because often, the reason one is using "touch" in a
script is because one wants to make sure that a file exists before
doing an operation that expects the file to already exist. But if the
file already exists, then touch has a side effect of changing the
mtime or the atime. [On many systems, one can work on a file without
changing the atime thanks to mount options such as noatime or
relatime.]
It's easy enough to wrap touch in an if:
if [ ! -e $file ]; then touch $file; fi
But it would be nicer if this common case were built in. I would
suggest -e, for exists. Thanks!
- Morty
[Message part 3 (message/rfc822, inline)]
tags 9742 + notabug
thanks
Morty wrote:
> On Thu, Oct 13, 2011 at 10:05:05AM +0100, Pádraig Brady wrote:
>
>> Note the above is easier to express in shell like:
>>
>> [ -e "$file" ] || touch "$file"
>
> Thanks, I'm familiar with it. :)
>
>> But that is racy. If you were using touch for locking purposes
>
> I'm using touch to make sure the file exists before an operation that
> will yield an error if it doesn't exist. For example:
Thanks for the suggestion.
However, when there's such an easy and portable way to do what you want,
touch_if_absent() { test -e "$1" || touch "$1"; }
it is counterproductive (and contrary to the "Unix way") to encumber
a tool like "touch" with an option to provide that functionality.
Besides, then you'd have to wait until a release including your
option makes it into whatever distribution you use (or build from source).
With the above, you have something that is portable and works now.
> resolv=/etc/resolv.conf
> touch $resolv
> ci -l -t-$resolv -m"check-in existing" $resolv
> grep -q domain $resolv || echo domain $domain >> $resolv
> ci -l -m"add domain $domain" $resolv
>
> The intent of code like the above is to make sure a certain file is in
> revision control and contains a certain setting. If the file already
> is in revision control and has the setting, the code should do
> nothing. But touch changes the mtime. The problem could be fixed by
> slinging around ifs, but that's inelegant.
This bug report was last modified 13 years and 228 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.