× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



I was replying to this when I saw Scott's (better) reply come through.

I have only two additions:

This command: find . -name '\*.java' -print

Will not "find" anything in my experience. Scott didn't mention that, but
perhaps because it wasn't important in this context. But just for the
joy... here's a quick test:

touch '\*.java' '\abc.java'
ls *java # <-- will show you that these files were created
find . -name '\*.java' -print

Above will not find even the filename that exactly matches what you were
seeking. To eliminate these files after test, do rm '\*.java' '\abc.java'

The other thing is that I don't use the -print option; never saw the sense
in it, and I don't understand why the technique is so popular. To me, it's
like telling a person in good health to breathe. They'll do it whether I
tell them to or not. And if they're not going to, my prompting won't help.
Maybe I'm missing something, but in this case I think less is more. (I also
don't tell RPG that my character fields are type A, for the same reason.)

NOP
NOP
NOP
(OK, I'm done.)

Dennis Lovelady
http://www.linkedin.com/in/dennislovelady
--
Very funny, Scotty. Now beam my clothes down too.


The \ character is an escape character. It tells the shell to pass the
character that follows it (the * in your example) as-is to the program
instead of interpreting it by it's special meaning (wildcard)

The goal here is to let the 'find' program handle the wildcard instead
of the shell.

So when you have

find . -name \*.java

it passes the * to the program -- therefore letting the program take
care of the wildcard. If you had left off the \, the shell would've
expanded it into a list of filenames, and passed that list to to 'find'
-- which wouldn't work properly in this situation.

Why didn't this work?

find . -name '\*.java' -print

Well, now it's looking for a file that contains the \ character because
the \ is in quotes. The only characters you can escape inside strong
quotes are the ' and \ characters. Anything else is treated literally.
So it's looking for a file that has \ in the name... and you probably
don't have any.

What about this?

find . -name \'*.java' -print

Well, the ' character is now being escaped because it's preceded by a \
char -- so it'll be looking for a file with ' in the name. The
wildcard
is not escaped, so the shell will expand it into a list of filenames.
The second ' character is treated as the start of a new quoted string -
-
so the shell won't even think you're done with the command. It'll
think
you still have more to type (until it finally encounters another '
character)

... anyway ...

If you want to prevent it from recursing into subdirectories, one
somewhat simple solution is to do this:

find *.java -print

This tells the shell (not 'find') to produce a list of java files in
the
current directory. It then passes that list to the find command -- and
that'll be all that find searches. (Assuming you don't have any
directories that end in .java, it means it'll stay in the current
directory.)

It's a bit of a kludge, really, but'll probably work. Unfortunately,
the stupid IBM i versions of 'find' don't have a switch to prevent
recursion.


On 5/14/2010 12:26 PM, Charles Wilt wrote:
Dennis,

I was testing the statement via direct entry into a QSH session. ie.
from the shell prompt.

Test recursive find:
cd /home/myuserid

find . -name \*.java -print
./GetInactiveCabinets.java
./testsub/GetInactiveCabinets.java
./testcmw.java


This worked:
find . \( ! -name . -prune \) -name \*.java -print
./GetInactiveCabinets.java
./testcmw.java

But this didn't
find . \( ! -name . -prune \) -name '\*.java' -print

Nor did this
find . \( ! -name . -prune \) -name \'*.java' -print

Just trying to understand why I don't have to quote the wildcard...

Charles

On Fri, May 14, 2010 at 10:48 AM, Dennis
Lovelady<iseries@xxxxxxxxxxxx> wrote:
Not sure I quite understand, Charles. (Sorry.) Are you doing this
via QSH
command or direct entry to the shell, or in a script or something
else?

Can you provide an example that doesn't work for you, and I'll see
if I can
determine what needs to be done to make it work?

Dennis Lovelady
http://www.linkedin.com/in/dennislovelady
--
Fear less, hope more,
eat less, chew more,
whine less, breathe more,
talk less, say more,
hate less, love more,
and all good things will be yours.
-- Swedish proverb
The thing is, when I quote the *.c...it doesn't find anything.
Leave
it unquoted and it does.

Is the shell seeing the \ as an escape charactor and thus the
quotes
are not needed to prevent the shell from expanding the wildcard
perhaps?

What would I need if the pattern I'm actually looking for looks
like
???? .fin.cis0000.staf.input01.????????.zip

Charles

On Fri, May 14, 2010 at 9:44 AM, Dennis
Lovelady<iseries@xxxxxxxxxxxx>
wrote:
I forgot about prune. I believe the below will work in most cases
(but do
read the next paragraph). You are correct: the * in *.c would
need
to be
escaped or enclosed in quotes. It'll work if there's no *.c file
in
the
current directory (the one from which the command is issued) but
that's
dicey.

The thing I don't like about -prune is that the documentation I've
seen is
sketchy and ambiguous. So are the results. For example, I would
expect
this to return a list of all files in the current directory:
find . -prune
but it won't. Likewise, this returns an empty list except the
lone
dot:
find . -name "*" -prune

Dennis Lovelady
http://www.linkedin.com/in/dennislovelady
--
"Some see the problem in every opportunity, some see the
opportunity
in
every problem."
-- Kevin Cowling

I found this message on the net....

cd to the directory in question so that you can use . in the find
command,
then, for example,
find . \( ! -name . -prune \) -name \*.c -print

It seems to work, but I don't understand why *.c doesn't need to
be
quoted....

Also, it seems that this doesn't find recursively, but I'm not
sure
if
the shell isn't processing the wildcard....
find /mypath/*.txt

I need a better understanding of how shells and unix type
utilities
work! :)
Anybody know a good manual?

Thanks,
Charles




On Fri, May 14, 2010 at 8:44 AM, DrFranken<midrange@xxxxxxxxxxxx>
wrote:
Charles,

Sadly there IS a switch however it's not supported by find in
PASE.
Worked through that myself just yesterday.

- Larry
Dennis,

Is there a switch I'm not seeing to make find non-recursive?

Thanks,
Charles

On Thu, May 13, 2010 at 11:54 AM, Dennis
Lovelady<iseries@xxxxxxxxxxxx> wrote:

What's the currently recommended way of purging IFS files by
date?

I found an old utility from Scott Klement, that comes really
close
to
perfect. The only issue is it purges everything in a given
directory,
I'd like to be able to pass a wildcard file name. I haven't
look
at
it in detail, but I suspect that modifying it to process file
name
wildcards would be non-trivial. Then again, perhaps not if I
can
find
an good example of comparing a wild card value to another
string,
(regex perhaps? but might be overkill).

find /my_path -mtime ${PURGE_DAYS} -name "${WILDCARD_NAMES}" -
exec
rm {} \;

Dennis Lovelady
http://www.linkedin.com/in/dennislovelady
--
"Inanimate objects are classified scientifically into three
major
categories
- those that don't work, those that break down, and those that
get
lost."
-- Russell Baker



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.