Re: Bash Pattern Matching Syntax
I want to list the files in a directory that end in .jpg irregardless of case. Thus after reading the bash man page, it seems I should be able to issue a command something along the lines of ls [*.[JjPpGg]] or ls *.[JjPpGg] but neither of these work and return a No such file or directory message. I've also tried various ways of escaping the '*' and '. but that didn't help either. However ls *[JjPpGg] does work by listing the files. However I want to match the . before jpg as well. What is the correct syntax for what I'm trying to do? Thanks, Drew ls *.{JPG,jpg} or ls *.{J,j}{P,p}{G,g} ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to [EMAIL PROTECTED]
Re: Bash Pattern Matching Syntax
On 10/15/2005 4:07 PM Will Maier wrote: On Sat, Oct 15, 2005 at 03:37:11PM -0700, Drew Tomlinson wrote: I want to list the files in a directory that end in .jpg irregardless of case. Thus after reading the bash man page, it seems I should be able to issue a command something along the lines of ls [*.[JjPpGg]] or ls *.[JjPpGg] but neither of these work and return a No such file or directory message. I've also tried various ways of escaping the '*' and '. but that didn't help either. However ls *[JjPpGg] does work by listing the files. However I want to match the . before jpg as well. What is the correct syntax for what I'm trying to do? The square brackets define a range of characters; [a-z] includes all lowercase alphabetic characters between 'a' and 'z' and will match _only one character from that range_ in a given string. [a-z] matches 'b' [a-z] matches 'z' [a-z] doesn't match 'all' [a-z] doesn't match '1' Your first attempt, [*.[JjPpGg]], has an extra pair of brackets. Secondly, it (like your second attempt) defines a range that would match only one character, JjPpGg: [JjPpGg] matches 'j' [JjPpGg] matches 'G' [JjPpGg] doesn't match 'JPG' [JjPpGg] doesn't match 'jpg' You need to break your patterns up; what you're looking for is a pattern of three characters, with 'J' or 'j' in the first position, 'P' or 'p' in the second, and 'G' or 'g' in the third. That entire pattern should be prepended by a string of any characters (*) and a period (.). Here are some examples to demonstrate what I've written above; they conclude with a pattern that will match the files you're looking for. sh-3.00$ ls a all test.JPG test.jpg sh-3.00$ ls [a-z] a sh-3.00$ ls [all] a sh-3.00$ ls *.[JjPpGg] ls: *.[JjPpGg]: No such file or directory sh-3.00$ ls *.[Jj][Pp][Gg] test.JPG test.jpg Thank you very much for your explanation. Now I understand my error. :) Drew -- Visit The Alchemist's Warehouse Magic Tricks, DVDs, Videos, Books, More! http://www.alchemistswarehouse.com ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to [EMAIL PROTECTED]
Bash Pattern Matching Syntax
I want to list the files in a directory that end in .jpg irregardless of case. Thus after reading the bash man page, it seems I should be able to issue a command something along the lines of ls [*.[JjPpGg]] or ls *.[JjPpGg] but neither of these work and return a No such file or directory message. I've also tried various ways of escaping the '*' and '. but that didn't help either. However ls *[JjPpGg] does work by listing the files. However I want to match the . before jpg as well. What is the correct syntax for what I'm trying to do? Thanks, Drew -- Visit The Alchemist's Warehouse Magic Tricks, DVDs, Videos, Books, More! http://www.alchemistswarehouse.com ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to [EMAIL PROTECTED]
Re: Bash Pattern Matching Syntax
On Sat, Oct 15, 2005 at 03:37:11PM -0700, Drew Tomlinson wrote: I want to list the files in a directory that end in .jpg irregardless of case. Thus after reading the bash man page, it seems I should be able to issue a command something along the lines of ls [*.[JjPpGg]] or ls *.[JjPpGg] but neither of these work and return a No such file or directory message. I've also tried various ways of escaping the '*' and '. but that didn't help either. However ls *[JjPpGg] does work by listing the files. However I want to match the . before jpg as well. What is the correct syntax for what I'm trying to do? The square brackets define a range of characters; [a-z] includes all lowercase alphabetic characters between 'a' and 'z' and will match _only one character from that range_ in a given string. [a-z] matches 'b' [a-z] matches 'z' [a-z] doesn't match 'all' [a-z] doesn't match '1' Your first attempt, [*.[JjPpGg]], has an extra pair of brackets. Secondly, it (like your second attempt) defines a range that would match only one character, JjPpGg: [JjPpGg] matches 'j' [JjPpGg] matches 'G' [JjPpGg] doesn't match 'JPG' [JjPpGg] doesn't match 'jpg' You need to break your patterns up; what you're looking for is a pattern of three characters, with 'J' or 'j' in the first position, 'P' or 'p' in the second, and 'G' or 'g' in the third. That entire pattern should be prepended by a string of any characters (*) and a period (.). Here are some examples to demonstrate what I've written above; they conclude with a pattern that will match the files you're looking for. sh-3.00$ ls a all test.JPG test.jpg sh-3.00$ ls [a-z] a sh-3.00$ ls [all] a sh-3.00$ ls *.[JjPpGg] ls: *.[JjPpGg]: No such file or directory sh-3.00$ ls *.[Jj][Pp][Gg] test.JPG test.jpg -- o--{ Will Maier }--o | jabber:[EMAIL PROTECTED] | email:[EMAIL PROTECTED] | | [EMAIL PROTECTED] | [EMAIL PROTECTED] | *--[ BSD Unix: Live Free or Die ]--* ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to [EMAIL PROTECTED]