Im looking for 2 Files -> *.WAV and *.wav with
find . -name 'unavail.wav' -o -name 'unavail.WAV'
I need to list the Folders that contains these 2 Files?
Thx in advance
Im looking for 2 Files -> *.WAV and *.wav with
find . -name 'unavail.wav' -o -name 'unavail.WAV'
I need to list the Folders that contains these 2 Files?
Thx in advance
Maybe like this?
find . -iname 'unavail.wav' | tr A-Z a-z | sort | uniq -cd
That won't work as expected if there are folders that only differ in case too.
yeah, seems to working
XXX:[XXX]/voip/old # find . -name 'unavail.wav' -o -name 'unavail.WAV' | tr A-Z a-z | sort | uniq -cd
2 ./2309/unavail.wav
2 ./2315/unavail.wav
2 ./33010/unavail.wav
2 ./8336/unavail.wav
XXX:[XXX]/voicemail/voip/old #
thank you very much. otherwise i would have to check more then 600 folders manually.
Hi,
You could also use;
find . -name 'unavail.wav' -o -name 'unavail.WAV' -printf %h
This should print only directory names where matching files exist.
Regards
Gull04
Should there be directories that differ in case only (the caveat that stomp mentioned, which is negligible with your numeric directories obviously), you could use
find . -iname 'unavail.wav' | rev | sort -t"/" -k2 | cut -d"/" -f2- | rev | uniq -cd
on the other hand, with a looong pipeline like that, you might be better off using e.g. awk
.
this doesnt work for me. I find many folders but not those where both files (unavail.WAV & unawail.wav) were contained.
XXX:[XXX/voip/old # find . -name 'unavail.wav' -o -name 'unavail.WAV' -printf %h
./7325./6657./2309./5863./3339./4045./96964./5867./3336./98764./33010./5891./2312./2057./2352./5861./7322./7332./8336./5890./2311./2128./2346./5880./2333./2300./5553./5881./5882./2313./2304./2360./2339./2335./5883./2369./2308./98765./2129./2325./96962./5252./7333./5371./4950./2329./6606./3333./2344./2306./5859./5898./5830./5897./5860./2321./2347./2316./5862./5864./2310./2307./34699./7331./2345./5896./5870./2399./2371./7320./3338./2356./2368./5866./2323./2380./2318./5868./2330./5872./5601./5833./2365./5894./5865./5885./2361./5843./2338./9015./2328./5869./2301./5886./2341./2354./2353./4946./2367./5893./2317./1234./2320./2303./2357./2319./2315XXX:[XXX]/voip/old #
when i look into the found foldes I see just one file
XXX:[XXX]/voip/old # ll 7325
insgesamt 12
drwxr-xr-x 2 root root 4096 5. Aug 2011 INBOX
-rw-r--r-- 1 root root 6040 5. Aug 2011 unavail.WAV
XXX:[XXX]/voip/old #
but I need those Folders where both Files (unavail.wav & unawail.WAV) are in it.
XXX:[XXX]/voip/old # find . -name 'unavail.wav' -o -name 'unavail.WAV' | tr A-Z a-z | sort | uniq -cd
2 ./2309/unavail.wav
2 ./2315/unavail.wav
2 ./33010/unavail.wav
2 ./8336/unavail.wav
XXX:[XXX]/voip/old #
So when I look into these folders:
XXX:[XXX]/voip/old # ll 2309
insgesamt 164
-rwx------ 1 root root 386 5. Aug 2011 busy.WAV
drwx------ 2 root root 4096 5. Aug 2011 Cust5
-rwx------ 1 root root 1750 5. Aug 2011 greet.WAV
drwxr-xr-x 2 root root 4096 5. Aug 2011 INBOX
drwx------ 2 root root 4096 5. Aug 2011 Old
-rw-r--r-- 1 root root 134198 5. Aug 2011 unavail.wav
-rwx------ 1 root root 2010 5. Aug 2011 unavail.WAV
drwx------ 2 root root 4096 5. Aug 2011 Work
XXX:[XXX]/voip/old #
thx anyway
Hi,
Sorry, I assumed that you would have a bit more knowledge of find
so for completeness;
find ./ -name 'unavail.wav' -o -name 'unavail.WAV' -printf '%#m %u %h\n'
Give that a try - you should read the find
man page and adjust the required output on the printf
option.
Regards
Gull04
Hi Gull04,
I tested your variant with this...
stomp@box:~/tmp$ find a
a
a/a.wav
a/A.wav
stomp@box:~/tmp$ find ./ -name 'a.wav' -o -name 'A.wav' -printf '%h\n'
./a
stomp@box:~/tmp$
...and I'm wondering why I have only 1 result. I would expect 2 results, as I understand the command like this: "Search for a file name a.wav or A.wav and print the corresponding parent directory". So why only 1 result here?
hehe, no i dont use linux for almost 10 years now.
thx for your answer, but still same result:
XXX:[XXX]/voip/old # find ./ -name 'unavail.wav' -o -name 'unavail.WAV' -printf '%#m %u %h\n'
0644 root ./7325
0644 root ./6657
0700 root ./2309
0644 root ./5863
0700 root ./3339
0644 root ./4045
0700 root ./96964
0644 root ./5867
0700 root ./3336
0644 root ./98764
0700 root ./33010
0644 root ./5891
0644 root ./2312
0644 root ./2057
0700 root ./2352
0644 root ./5861
0644 root ./7322
0644 root ./7332
0700 root ./8336
0700 root ./5890
0644 root ./2311
0644 root ./2128
0644 root ./2346
0644 root ./5880
0644 root ./2333
0644 root ./2300
0700 root ./5553
0644 root ./5881
0644 root ./5882
0644 root ./2313
0644 root ./2304
0644 root ./2360
0644 root ./2339
0644 root ./2335
0644 root ./5883
0644 root ./2369
0644 root ./2308
0700 root ./98765
0700 root ./2129
0644 root ./2325
0700 root ./96962
0700 root ./5252
0644 root ./7333
0644 root ./5371
0644 root ./4950
0644 root ./2329
0644 root ./6606
0700 root ./3333
0644 root ./2344
0644 root ./2306
0644 root ./5859
0644 root ./5898
0644 root ./5830
0644 root ./5897
0644 root ./5860
0644 root ./2321
0644 root ./2347
0644 root ./2316
0644 root ./5862
0644 root ./5864
0644 root ./2310
0644 root ./2307
0644 root ./34699
0700 root ./7331
0644 root ./2345
0644 root ./5896
0644 root ./5870
0700 root ./2399
0644 root ./2371
0644 root ./7320
0700 root ./3338
0644 root ./2356
0644 root ./2368
0644 root ./5866
0644 root ./2323
0644 root ./2380
XXX:[XXX]/voip/old #
in none of the founded folders are both files together: unavail.wav & unavail.WAV.
just one of them exist in them:
XXX:[XXX]/voip/old # ll 7325
insgesamt 12
drwxr-xr-x 2 root root 4096 5. Aug 2011 INBOX
-rw-r--r-- 1 root root 6040 5. Aug 2011 unavail.WAV
XXX:[XXX]/voip/old # ll 5863
insgesamt 12
drwxr-xr-x 2 root root 4096 5. Aug 2011 INBOX
-rw-r--r-- 1 root root 6040 5. Aug 2011 unavail.WAV
XXX:[XXX]/voip/old # ll 3339
insgesamt 20
drwx------ 2 root root 4096 5. Aug 2011 INBOX
-rwx------ 1 root root 12670 5. Aug 2011 unavail.WAV
XXX:[XXX]/voip/old # ll 96964
insgesamt 8
drwxr-xr-x 2 root root 4096 5. Aug 2011 INBOX
-rwx------ 1 root root 3310 5. Aug 2011 unavail.WAV
XXX:[XXX]/voip/old #
so
find . -name 'unavail.wav' -o -name 'unavail.WAV' | tr A-Z a-z | sort | uniq -cd
worked fine
thx alot : )
Hi,
I'll suggest that it's the way your search parameters are configured, as a simple example see below;
/-> touch a.txt A.txt
/-> find / -name "[a,A].txt" -printf '%h\n'
/home/e434069
/home/e434069
/-> find / -name a.txt -o -name A.txt -printf '%h\n'
/home/e434069
/->
As you can see there are implications for how you configure the find
with the or
option.
Regards
Gull04
thank you very much. i will work on it =)
Hi,
You can change the find to;
find / -name "unavail.[W,w][A,a][V,v]" -printf '%#m %u %h\n'
A little bit messy maybe, I'm sure someone will know a better way of doing this.
Regards
Gull04
The reason for above single item output is "operator precedence". man find
:
So above command reads find / -name a.txt -o \(-name A.txt -printf '%h\n' \)
as (implied) -a
precedes -o
. Run
$ find \( -name a.txt -o -name A.txt \) -printf '%f\n'
A.txt
a.txt
to overcome the problem.
Thanks Rudi,
I finally understood this now, so I'm at last able to use that find ... -prune thing now after 25 years(was a great mystery to me)