Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I would like to know if a particular folder is present or not. I used the following command

find /mnt/md0/ -maxdepth 1 -name 'dcn'||'DCN'

I want to know if folder name is DCN or dcn .
How would I do this ?

share|improve this question
1  
an easy one too: find /mnt/md0 -type d -maxdepth 1 -print | grep -i '/dcn$' –  Olivier Dulac Feb 4 at 14:56
    
@OlivierDulac that's a major complication of process when the binary offers the possibility already, though it can be usefull on UNIX system without GNU binary. –  Kiwy Feb 4 at 15:04
    
@Kiwy: don't mind me, I always propose "portable" alternative, as I almost don't have any GNU version at work (but instead I have very ancient "historical" ones, even "tar who uncompress keeping the leading '/'" ...). I'm very concerned about portability (even if it means a bit more verbose solution, hence I just put as a comment here...). [on the other hand, I don't gracefully handle "weird filenames", but I never encountered filenames with embedded "returns" so far (whereas I use old utilities everyday)] [I know there was a Linux tag, but still, it's to give alternatives for other viewers] –  Olivier Dulac Feb 4 at 15:14

3 Answers 3

up vote 11 down vote accepted

You're looking for the option -iname, which stands for "ignore case" on GNU find along with the option -type d for selecting only directories.

find /mnt/md0/ -type d -maxdepth 1 -iname dcn

For more a detail explanation on find switches you consult explainshells.com's explanation of find. (This will match any case: dcn , DcN, DCn)

Edit 1:

As state in comment by Olivier Dulac to use with non GNU find or old find version you could use :

find /mnt/md0 -type d -maxdepth 1 -print | grep -i '/dcn$'

see this answer to have a real compatibility with non GNU and old find version

share|improve this answer
    
+1 for the link to explainshell.com. –  slm Feb 4 at 14:16
    
@slm I do love that website, it's really nice when having to deal with lot of option on GNU binaries. thanks for the edit by the way. –  Kiwy Feb 4 at 14:20
1  
Note that it matches dcn and DCN, but also Dcn, dCN... Note that beside GNU, like -maxdepth, -iname is also available in modern BSDs find and in busybox find. –  Stéphane Chazelas Feb 4 at 15:30
1  
The find implementations that don't have -iname are also likely not to have -maxdepth. Also note that you can't use grep on filenames as grep works on lines while filenames can be made of several line. See my answer for the standard/portable way. –  Stéphane Chazelas Feb 5 at 9:05
    
@StephaneChazelas you're perfectly right, I do check on AIX and indeed no maxdepth argument –  Kiwy Feb 5 at 9:08

You can use this:

find /mnt/md0/ -type d -maxdepth 1 \( -name 'dcn' -o -name 'DCN' \)
share|improve this answer

Standardly:

find /mnt/md0/. ! -name . -prune -type d \( -name dcn -o -name DCN \)

Or for case insensitive match:

find /mnt/md0/. ! -name . -prune -type d -name '[dD][cC][nN]'

You don't necessarily need find though.

printf '%s\n' /mnt/md0/[dD][cC][nN]/
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.