Re: list directories recursive using a function ( ksh, ksh93)

On Sat, 26 Jan 2013 19:54:05 +0000, Martijn Dekker wrote:

> In article <ke0e0n$qfm$>,
>  Janis Papanagnou <> wrote:
>> > #!/bin/sh
>> > 
>> > f_lsr() (
>> >    cd "$1" || return for file in .* *; do
>> >       case "$file" in "." | ".." | ".*" | "*" ) continue ;;
>> >       esac printf '%s/%s\n' "$1" "$file"
>> >       test -d "$file" -a ! -L "$file" && f_lsr "$1/$file"
>> >    done cd ..
>> > )
>> A final "cd .." in a sub-shell context?
> Yeah, that's a bit pointless, isn't it? I should have removed that.
>> All the pattern expressions (like ".*" and "*") inside case quoted?
> Yes, we are skipping any unresolved glob patterns which would otherwise
> be printed as literal glob patterns; this occurs if any directory
> doesn't contain files matching the pattern in question. So, so skip
> those, it's necessary to quote them to keep 'case' from interpreting
> them as glob patterns.
> Quoting the "." and ".." is optional since these aren't glob pattern
> metacharacters, but it seems like good style.
> - Martijn

Whilst it is good (and correct) that you are quoting the patterns, the 
logic is false.

Consider a directory which has a single file in it with a name of the 
single character *

The glob pattern in
   for file in .* *
will return ".*" (as the shell will return the glob pattern unchanged if 
there is no match) and "*" (as the "*" glob pattern will match the 
literal filename "*").

So by all means use a case statement to ignore "." and ".." (or you can 
extend the list of patterns you give to the for), you need to use 
something like "test" to see if "*" is the result of the shell returning 
"*" from globbing "*" because it doesn't match or because it matches a 
literal "*".

Some shells have an optional feature to make a failed glob expansion 
return an empty string.
un193 (82)
1/26/2013 8:39:16 PM 15309 articles. 0 followers. Post Follow

1 Replies

Similar Articles

[PageSpeed] 47
In article <U9XMs.124671$kN2.72846@fed02.iad>,
 Icarus Sparry <> wrote:

> So by all means use a case statement to ignore "." and ".." (or you can 
> extend the list of patterns you give to the for),

The "." and ".." are ignored to prevent infinite directory traversal 

> you need to use 
> something like "test" to see if "*" is the result of the shell returning 
> "*" from globbing "*" because it doesn't match or because it matches a 
> literal "*".

Yes, I was aware of that and stated this in my original message:

> > A third bugfix: if there are no dot-files or files in a directory, one 
> > of the literal glob patterns ".*" or "*" was reported. The version below 
> > skips those, but would also skip any files literally named ".*" or "*" - 
> > something that would not usually occur but is in fact allowed. An 
> > interesting article about the problems this can cause is at: 
> >

None of my Unix filesystems contain any files named "*" or ".*", nor 
should they. I didn't think it was worth the effort to do this 
"correctly" given the problematic lack of restrictions in Unix filenames.

On the other hand, your message made me think some more and it isn't 
actually that hard at all:


f_lsr() (
   cd "$1" || return
   for file in .* *; do
      case "$file" in
      "." | ".." ) continue ;;
      ".*" | "*" ) test -e "$file" || continue ;;
      printf '%s/%s\n' "$1" "$file"
      test -d "$file" -a ! -L "$file" && f_lsr "$1/$file"

f_lsr "$1"
martijn1 (31)
1/28/2013 8:23:16 PM
Similar artilces about - Re: list directories recursive using a function ( ksh, ksh93):

Re: ot
A very good all purpose server product of this nature that I have extensi= ve=20 experience with is FirstClass ( * To join/leave the list, search archives, change list settings, * * etc., please visit * ...

Re: Out of Area Calls #17 (Robert Bonomi) writes: > pointed out that the law made *no* such provision for delay on an > -internally-maintained- list, and required that they update my > _customer_record_ with a note that 'customer has ordered us -never- to > make marketing calls to him', and the date/time. Three days later, > somebody "didn't read" the notes, and called me. I promptly demanded > a supervisor, had them read the account 'notes', and asked if they > wanted to pay the statutory $500 minimum, or if I needed to go to &g...

Re: Creating a new variable? #4
Hi, Yes, you can do it easily. This is one solution: Proc sort data=3DTab1; by Id; run; Data Tab1; set Tab1; by Id; retain INC 0; if first.Id then INC=3D0; Inc=3Dinc+1; run; Le 16:01 7/02/2006, vous avez =E9crit: >Hi > >I have alarge data set in which I have a unique ID, for each id there are= 49 >observations, now I want to create a new variable which would be equal to 1 >for first observation and increment in steps of 1 to 49 and then reset to 1 >and continue. is there a way of doing this? > >thanks > >Vj Alexandre BAUDRY Unit=E9...

RE: Question to Kerry Main
> -----Original Message----- > From: JF Mezei [] > Sent: June 30, 2007 8:31 PM > To: Info-VAX@Mvb.Saic.Com > Subject: Question to Kerry Main >=20 > Mr Main, your arguments on c.o.v. are often rebutted as part of normal > debating process. (And you rebutt other arguments with your own > responses). >=20 > In real life, do you also find customers and potential customers > having > similar questions ? Or do you conclude that we, in c.o.v. are a > sepcial > bunch living in a totally different universe without a clue...

Re: Really Frustrating -9628 Errors #2
On Thu, 2005-11-17 at 14:23 -0500, Adam Tauno Williams wrote: > We've written several Informix stored procedures that return MULTISET as > the type; the application than does a SELECT a,b,c FROM > TABLE({procedurename}({parameterlist...})). And these WORK!!! But only > for awhile, the next day, or after a couple of days suddenly they stop > working - and they haven't been changed. They simply start to bomb out > with a -9628 (type not found) error for any SQL statement like the > above. > We are using "IBM Informix Dynamic Server Version 10.00...

Re: String question #6
As Howard example shows the last observation passed incorrectly, Is there a reason why the third observation(123 12) did not pass incorrectly. Is that a length issue or something different? On Thu, 1 May 2008 09:50:19 -0400, Howard Schreier <hs AT dc-sug DOT org> <schreier.junk.mail@GMAIL.COM> wrote: >On Thu, 1 May 2008 08:16:37 -0400, Richard A. DeVenezia ><rdevenezia@WILDBLUE.NET> wrote: > >>Dominic Mitchell wrote: >>> input var1 var2 $6.; >>> cards; >>> 99 9982 >>> 998 998 >>> ; >> >>The INPUT statem...

error in using vectors
Hi All, I am using a header file called vector.hh #ifndef VECTOR_HH #define VECTOR_HH #include <assert.h> template <class T> class Vector { public: typedef T value_type; typedef T& reference; typedef const T& const_reference; typedef T* pointer; typedef const T* const_pointer; typedef int size_type; typedef T* iterator; typedef const T* const_iterator; explicit Vector() : _l(0), _n(0), _capacity(0) { } explicit Vector(size_type n, const T &e) : _l(0), _n(0), _capacity(0) { resize(n, e); } // template <class In> ... Vector(const Vector...

Problem using the ODBC text driver
Hi. I have the following problem - I am using the ODBC driver to open in Access a recordset based on a text file, using Set objRecordset = objDB.OpenRecordset(m_strImportTxtFileName, , dbReadOnly) The requirement is for the text file NOT to have a txt or csv extension, for "security reasons" - the customer should not be able to easily open the file. Anyway, we have decided on a "DIS" extension. The interesting part is this - on my development machine, I can open the file just fine with the above mentioned line. On the clients' machines, however, the following error p...

Re: More SQL simplification
Roger: In your version of the query, SAS 'remerges' summarized values back to the original dataset. It actually works the same as the query that joins a view to the original dataset. The simpler form of the query does not in general across different flavors of SQL. Sig -----Original Message----- From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of Roger Lustig Sent: Tuesday, September 14, 2004 7:12 PM To: SAS-L@LISTSERV.UGA.EDU Subject: Re: More SQL simplification Pat: You've answered your own question! No reason you can't do a GROUP BY while selecting colum...

Re: question about data values #11
Howdy Toby - The V9 compress function has new useful modifiers to handle all numbers, all letters, typewriter characters etc. In this case D is for digits 0-9 and K is for Keep (rather than compress). 10 data _null_ ; 11 x = 'A1234' ; 12 y = input(compress(x,'','DK'),5.0); 13 put x= y= ; 14 run ; x=A1234 y=1234 regards as always - Paul Choate DDS Data Extraction (916) 654-2160 -----Original Message----- From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of toby dunn Sent: Monday, June 27, 2005 4:41 PM To: SAS-L@...

OT: Using ibm 122-type keyboards with terminal emulation software going to a mainframe
Does anyone have any experience with using 122 key keyboards with an emulator and connecting to a mainframe and actually using pf13-24 plus the other keys such as erase eof? I have found several 122 keyboards out there but I have not found one that uses all of the extra keys. At the moment, I have both Netmanage and Hummingbird Exceed available but no keyboard that will work with them. Or, does anyone know of a discussion group where I could take the question? Many thanks, Nat Wooding ...

This is an autoresponder. I'll never see your message. ...

Re: How to obtain FrameTicks List from an existing Plot?
t = Range[5]; p = ListPlot[t, Frame -> True]; FrameTicks /. AbsoluteOptions[p] Bob Hanlon ---- Nasser Abbasi <> wrote: ============= I have a need to obtain the FrameTicks list from an existing plot. The reason I want to do this, is because I need to slightly modify the ticks, and then redraw the plot with the new Ticks. This would be much easier than having to generate the Ticks myself in the first place. This is an example: t = Range[5]; p = ListPlot[t, Frame -> True] But when I look at FullForm[p], I see no list would would look like the...

Re: [HP3000-L] Save and Re-Use a File Equation
Jay writes: > What I'd like to do is to save the file equation with the parameters the > user entered, and then re-use that file equation after the checks are > printed. Like this: > > 1. Enter printer name, etc for reports > 2. Submit job, which does: > a. file report;dev=<parameters from 1 above> > b. run program A > c. file print=checks;dev=lp;forms=mount checks > d. run program B to print checks > e. file report;dev=<parameters from 1 above> > f. run program C to create report to print on printer ...

Re: array label question #9
Here's another approach. conceptually similar to the previous posts..... data _null_; %let colmns = ; do yr = 2007,2008; do qtr = 1 to 4; do channel_cd = 1 to 3; do Incentive_Type = 1,2; call symput ('colmns', symget ('colmns') || ' ' || '_' || catx('_',yr,qtr,channel_Cd,Incentive_Type)); end; end; end; end; run; data transpose (drop = yr qtr channel_cd incentive_type contacts) ; format &colmns best32.; array all [2007:2008, 1:4, 1:3, 1:2] _all_; do until(last.indiv_id) ; set have; by indiv_id; all{yr,qtr,ch...

Re: Question re Canon iP1500 #2
Been busy for a few days, so didn't get a chance to get back here. But need to ask about your message below. "zakezuke" <> wrote in message > > Do y ou mean I could fix the problem of the waste ink absorber myself? I > > thought you can't see it by just looking into the printer > > The waste counter you can reset with the service tool QY9-0066 as Tony > explained. You can get it here >

Re: own package doesnt work correctly?
Martin, Symbols like x and I are set up in the package`Private` context once you put the definition inside the package. So they won't match Global`x or Global`I in a notebook using the package. You could either add the Global` context to these symbols in the package, or better yet pass them as parameters to the rule. partintrulx[x_,I_]:= ..... David Park From: Martin [] Hello, I started to - try to - use packages written on my own, using the Notebook editor, marking the cells as initializa...

Re: Now That They're Mounted ... #9
Correct me if I'm wrong, but MPE does not provide automatic failover in the event a controller dies. Yes, you can connect 2 controllers, but one won't take over for the other in the event of failure. That's an important distinction to recognize. John Lee Vaske Computer Solutions At 03:35 PM 8/18/04 -0400, Gilles Schipper wrote: >At 03:20 PM 2004-08-18, you wrote: >>O.K. two brain farts. Can't have more than 7 logical drives. > > >The mod20 supports up to 8 luns or logical drives. > > >>And you can't split the SCSI, (and u...

Re: Apple's iPod Raises Bar For Digital Music Players
Hey- Check out this great site that is giving away totally FREE iPods! I've joined and I think you should as well. It's a completely legitimate offer, and this company has already given away $4 million in FREE stuff! All you have to do is join, complete an online offer, and refer friends to do the same. That's it! Here is my referral link. To help me get my iPod, click this exact link to join, or copy and paste it into a browser: Monty Solomon wrote: > Apple's iPod Raises Bar For Digital Music Players > By W...

Re: Call System in UNIX #7 1547219
Dear SAS-L-ers, Michael D. Ross posted the following interesting question: > Hi All, > I'm having trouble with the following code in Unix. It > creates the "dump.txt" file in the specified directory; > however, it has 0 records in it. Any suggestions? > > > > %let progs = /temp/mydir; > > data _null_; > command= " ll &progs *.sas > &progs/dump.txt"; > call system (command); > run; > Michael, I see it! It appears that you are falling prey to a subtle problem in your DATA _NULL_ step. Your problem is with the spac...

Re: New to SAS #2
Here is a very good paper that covers "everything" about learning more about SAS. It lists many resources of varying types, including SAS-L: -----Original Message----- From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of Sent: January 14, 2008 3:11 PM To: SAS-L@LISTSERV.UGA.EDU Subject: New to SAS I'm new to SAS and Data Extraction generally, does anyone have any hints, tips or advice that might be useful? I'm interested in: related websites, programming languages, programmes, b...

Function overloading #3
can we overload functions in a following way? class Fred { ... }; class MyFredList { public: const Fred& operator[] (unsigned index) const; Fred& operator[] (unsigned index); }; The only difference is that one is const member function and other one is not. Return values also differ by const but it should not matter for overloading. If it can be overloaded and called for a non-const object how the comiler optimizes it? siddhu wrote: > can we overload functions in a following way? This question is answered in the FAQ. > class Fred { ... }; > > class MyFr...

Re: Thanks Harry Re: SAS Data Step Qn.
Use Eric's solution, it's cleaner. -----Original Message----- From: []On Behalf Of Jeff Morison Sent: Tuesday, August 09, 2005 3:03 PM To: Droogendyk, Harry; SAS-L@LISTSERV.UGA.EDU Subject: Thanks Harry Re: SAS Data Step Qn. This worked out perfectly Harry, thanks very much. --- "Droogendyk, Harry" <harry.droogendyk@RBC.COM> wrote: > data a; > input HRN : CDATE : date7. STAGE : > start : stop; > format cdate date9.; > cards; > 609 21JUL03 2 307 ...

Re: OT:Boys,Its Cold Outside #15
>While at K I Sawyer AFB, 74-77, there was discussion of Northern Michigan >becoming a seperate state. They though it was a SUPERIOR idea. I remember that - I come from Northwestern Wisconsin, and as I recall it was Upper Penninsula Michigan and the Northern Wisconsin wanted to combine and form a new state. I think that they actually wanted to call the state "Superior". In the pre-cable days, the only television we could get in were Minnesota stations. Couldn't even get in the Packer games unless they were playing the Vikings. If you didn't know that ther...

RE: Re: corrected RE: Re: Computing sets of equivalences #2
This was all nonsense, >-----Original Message----- >From: Wolf, Hartmut >Sent: Wednesday, February 25, 2004 3:05 AM >To: >Subject: Re: corrected RE: Re: >Computing sets of >equivalences > > > >Bobby, > >it took me a while to discern what you added to Carl's >algorithm. It's the >line where you map addequiv over the rest of the argument sequence. > >But it is not at all obvious to do so, since in effect you do >not built on >the work done, but, in a way restore equivalences, which w...