Skip to content

Comment on Managing Work-In-Progress Folders with “ls -ltr”parent

Comments

I know it gets talked about quite a lot round here but I find zsh really quite useful for this type of thing..

the zsh equivalent of the above, for me would be

    ls **/* -ltr 
(Edit)[ for an exact reproduction ]
    ls **/*(.) -ltr
if you wanted to put a date range on it.. for example, only files from the last 5 days..
    ls **/*(m-5) -ltr
or the last 5 hours
    ls **/*(mh-5) -ltr

there's loads more of these http://grml.org/zsh/zsh-lovers.html, obviously your shell is a matter of preference, and if you know bash or something similar well enough then the incentive to change is obviously lessened.. but personally I've found that a whole series of small improvements (for me) added up to a pretty large win

edit: as pointed out by pyre, my initial suggestion isn't an exact replica.. but was the first thing that came to mind for me.. i guess s/the\ zsh\ equivalent/something\ similar\ in\ zsh/

edit again:

    /tmp/ $ mkdir -p /tmp/test1/test2/test3                          
    /tmp/ $ touch /tmp/test1/test2/test3/test4                       
    /tmp/ $ ls -ltr /tmp/test1/**/*(.)                               
    -rw-r--r-- 1 usr grp 0 Aug  7 15:49 /tmp/test1/test2/test3/test4 
    /tmp/ $ find /tmp/test1 -type f -print0 | xargs -0 ls -ltr       
    -rw-r--r-- 1 usr grp 0 Aug  7 15:49 /tmp/test1/test2/test3/test4
  **/*
does not match the '-type f' part of his filter:
  $ mkdir -p /tmp/test1/test2/test3
  $ touch /tmp/test1/test2/test3/test4
  $ ls -ltr /tmp/test1/**/*
  -rw-r--r-- 1 usr grp    0 2012-08-07 09:59 /tmp/test1/test2/test3/test4

  /tmp/test1/test2:
  total 4
  drwxr-xr-x 2 usr grp 4096 2012-08-07 09:59 test3

  /tmp/test1/test2/test3:
  total 0
  -rw-r--r-- 1 usr grp 0 2012-08-07 09:59 test4
On the other hand:
  $ find /tmp/test1 -type f -print0 | xargs -0 ls -ltr
  -rw-r--r-- 1 usr grp 0 2012-08-07 09:59 /tmp/test1/test2/test3/test4

Nice to know, thanks! But, how does it work with file names containing spaces (or other strange characters)?

Edit: just to clarify: my question concerns the zsh method. Regarding find+xargs, I wrote that comment :-) Actually, this edit would be an answer to zap; HN does not let me reply directly to him: is it to prevent flame-wars?

   /tmp/ $ mkdir -p test1/test2/test3                                       

   /tmp/ $ touch test1/test2/test3/test4                                    
   
   /tmp/ $ ls -ltr test1/**/*(.)                                            
   -rw-r--r-- 1 usr grp 0 Aug  9 11:11 test1/test2/test3/test4              

   /tmp/ $ touch test1/test2/test3/test\ with\ spaces                       

   /tmp/ $ ls -ltr test1/**/*(.)                                            
   -rw-r--r-- 1 usr grp 0 Aug  9 11:11 test1/test2/test3/test4              
   -rw-r--r-- 1 usr grp 0 Aug  9 11:12 test1/test2/test3/test with spaces

Thats what the print0 arg in find and the --null arg in xargs are for.

print0 prints the file name followed by a NULL character (rather than newline) Using the --null/-0 arg makes xargs look for NULLs as delimiters and treat everything else literally.

sefkOP

I keep considering moving to zsh. This example sure makes it look worthwhile. Thanks.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.