On Thu, 29 May 2014 14:31:03 -0500
Dennis Wicks <w...@mgssub.com> wrote:

> Can't quite figure out how to do this.
> 
> I'd like to be able to scan a Volume or directory and find 
> all directories that have only one item in them. Either 
> directory or file.
> 
> Any ideas??

This one

 *  wraps around find utility so that you can easily add
    further constraints (those will only apply to the directory
    you search, not to the child),

 *  works in good-old `sh`,

 *  returns true if found at least 1 (similar to grep),

 *  does not "slurp" the whole list, i.e. should start
    printing matches ASAP instead of waiting for find to finish:


    #!/bin/sh
    
    filter_single_item() {
        rv=1
        while read path;
        do
            test $(ls "$path" | wc -l) -eq 1 && echo "$path" && rv=0
        done
        return $rv
    }
    
    find "$@" -type d | filter_single_item

Yes it's quite ineffective as it creates at least 3 processes
per each dir it scans, but it depends on your case if it's
problem.

OTOH, if you are sure no dir contains space, you could use
`echo` instead of ls and add -w option to wc.  Eventually you
could even replace wc with some trick with variable expansion.
(probably switching to bash for better tricks).

aL.
-- 
Alois Mahdal


-- 
To UNSUBSCRIBE, email to debian-user-requ...@lists.debian.org 
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140602034936.18a1d...@hugo.daonet.home

Reply via email to