[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#22128: dirname enhancement
From: |
Nellis, Kenneth |
Subject: |
bug#22128: dirname enhancement |
Date: |
Thu, 10 Dec 2015 17:46:25 +0000 |
I got it. You don't like the idea. That's fine. Please close the ticket.
--Ken
> -----Original Message-----
> From: Bob Proulx [mailto:address@hidden
> Sent: Thursday, December 10, 2015 12:41 PM
> To: Nellis, Kenneth
> Cc: address@hidden
> Subject: Re: bug#22128: dirname enhancement
>
> Nellis, Kenneth wrote:
> > Still, my -f suggestion would be easier to type,
> > but I welcome your alternatives.
>
> Here is the problem. You would like dirname to read a list from a
> file. Someone else will want it to read a file list of files listing
> files. Another will want to skip one header line. Another will want
> to skip multiple header lines. Another will want the exact same
> feature in basename too. Another will want file name modification so
> that it can be used to rename directories. And on and on and on.
> Trying to put every possible combination of feature into every utility
> leads to unmanageable code bloat.
>
> What do all of those have in common? They are all specific features
> that are easily available by using the features of the operating
> system. That is the entire point of a Unix-like operating system. It
> already has all of the tools needed. You tell it what you want it to
> do using those features. That is the way the operating system is
> designed. Utilities such as dirname are simply small pieces in the
> complete solution.
>
> In this instance the first thing I thought of when I read your dirname
> -f request was a loop.
>
> while read dir; do dirname $dir; done < list
>
> Pádraig suggested xargs which was even shorter.
>
> xargs dirname < filename
>
> Both of those directly do exactly what you had asked to do. The
> technique works not only with dirname but with every other command on
> the system too. A technique that works with everything is much better
> than something that only works in one small place.
>
> Want to get the basename instead?
>
> while read dir; do basename $dir; done < list
>
> Want to modify the result to add a suffix?
>
> while read dir; do echo $dir.myaddedsuffix; done < list
>
> Want to modify the name in some custom way?
>
> while read dir; do echo $dir | sed 's/foo/bar/; done < list
>
> Want a sorted unique list modified in some custom way?
>
> while read dir; do echo $dir | sed 's/foo/bar/'; done < list | sort -u
>
> The possibilities are endless and as they say limited only by your
> imagination. Anything you can think of doing you can tell the system
> to do it for you. Truly a marvelous thing to be so empowered.
>
> Note that in order to be completely general and work with arbitrary
> names that have embedded newlines then proper quoting is required and
> the wisdom of today says always use null terminated strings. But if
> you are using a file of names then I assume you are operating on a
> restricted and sane set of characters so this won't matter to you.
> I do that all of the time.
>
> Bob
- bug#22128: dirname enhancement, Nellis, Kenneth, 2015/12/09
- bug#22128: dirname enhancement, Pádraig Brady, 2015/12/09
- bug#22128: dirname enhancement, Bob Proulx, 2015/12/10
- bug#22128: dirname enhancement, Nellis, Kenneth, 2015/12/10
- bug#22128: dirname enhancement, Bob Proulx, 2015/12/10
- bug#22128: dirname enhancement,
Nellis, Kenneth <=
- bug#22128: dirname enhancement, Stephane Chazelas, 2015/12/11
- bug#22128: dirname enhancement, Pádraig Brady, 2015/12/11
- bug#22128: dirname enhancement, Stephane Chazelas, 2015/12/11