AIX find with Variables


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users AIX find with Variables
# 1  
Old 01-28-2020
AIX find with Variables

I am trying to do a find with a variable but no matter which way I try it does not work. This is aix. Can I get some ideas on what I am doing wrong?

Code:
for i in `cat file`;     do find / -type f -name "$i" -exec ls -l {} + ; done
for i in `cat file`;     do find / -type f -name "\$i" -exec ls -l {} + ; done
for i in `cat file`;     do find / -type f -name "\\$i" -exec ls -l {} +; done
for i in `cat file`;     do find / -type f -name "${i}" -exec ls -l {} +; done
for i in `cat file`;     do find / -type f -name "{$i}" -exec ls -l {} +; done

# 2  
Old 01-28-2020
Quote:
Originally Posted by cokedude
... it does not work.
is not too good a starting point for an analysis.



Quote:
Can I get some ideas on what I am doing wrong?
Yes - start with a decent request - details like misbehaviour, error messages, file / directory structures, input data, execution logs, ...
These 2 Users Gave Thanks to RudiC For This Post:
# 3  
Old 01-29-2020
1. and 4. look okay.
This loop method is very slow: for each item it needs to scan all available files...
Turn on debug mode with set -x (turn off with set+x)
This User Gave Thanks to MadeInGermany For This Post:
# 4  
Old 01-29-2020
Quote:
Originally Posted by RudiC
is not too good a starting point for an analysis.



Yes - start with a decent request - details like misbehaviour, error messages, file / directory structures, input data, execution logs, ...

This the only output I get. Normally my version of find does not give any output when it does not find something so I added the execute option. Thats why it was so difficult to figure out.

Code:
find: 0652-083 Cannot execute :: A file or directory in the path name does not exist.
find: 0652-083 Cannot execute :: A file or directory in the path name does not exist.

I figured it out. There were several problems. Since I am using a variable I can not use single quotes so I switched to double quotes. This created a new problem. Asterisks do not behave as expected in double quotes. It does not matter if you use a one, two, three, or four backslashes.

I have seen seen from a lot of trial and error this works.

Code:
for i in `cat file`;     do find / -type f -name "$i"\* -exec ls -l {} + ; done
for i in `cat file`;     do find / -type f -name $i\* -exec ls -l {} + ; done

This did not work. Is there a way to use an asterisks in double quotes with find?

Code:
for i in `cat file`;     do find / -type f -name "$i\*" -exec ls -l {} + ; done
for i in `cat file`;     do find / -type f -name "$i\\*" -exec ls -l {} + ; done
for i in `cat file`;     do find / -type f -name "$i\\\*" -exec ls -l {} + ; done
for i in `cat file`;     do find / -type f -name "$i\\\\*" -exec ls -l {} + ; done

# 5  
Old 01-29-2020
If you want to look for filenames that begin with the value of the i variable:
Code:
find / -type f -name "$i*" -exec ls -l {} +

Within the "quotes" the shell expands $i but does not evaluate the * (filename generation).
But the find evaluates the * (for each pathname like the shell would do it).
This User Gave Thanks to MadeInGermany For This Post:
# 6  
Old 01-29-2020
Quote:
Originally Posted by MadeInGermany
If you want to look for filenames that begin with the value of the i variable:
Code:
find / -type f -name "$i*" -exec ls -l {} +

Within the "quotes" the shell expands $i but does not evaluate the * (filename generation).
But the find evaluates the * (for each pathname like the shell would do it).
Yes that works. I see where I went wrong. The $i was getting confused.

Code:
for i in `cat file`;     do find / -type f -name "$i_string*" -exec ls -l {} + ; done

I needed to do this to protect the $i. Use braces for the $i or take the $i out of the quotes.

Code:
for i in `cat file`;     do find / -type f -name "${i}_string*" -exec ls -l {} + ; done
for i in `cat file`;     do find / -type f -name $i"_string*" -exec ls -l {} + ; done

# 7  
Old 01-30-2020
Your first sample is correct.
Your second sample again allows the shell to fully expand $i including file name generation. The $i must be inside "quotes" to avoid it.
Another correct form is
Code:
for i in `cat file`;  do find / -type f -name "$i""_string*" -exec ls -l {} + ; done

Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Find between lines start and end: awk with bash variables

I have a file as follows: 0 1056 85540 414329 774485 1208487 1657519 2102753 2561259 3037737 3458144 3993019 4417959 4809964 5261890 5798778 6254146 I want to find all lines between a specified start and end tag. (6 Replies)
Discussion started by: jamie_123
6 Replies

2. UNIX for Dummies Questions & Answers

Using find command with variables

I have a number of files in the /tmp directory with PET-DOG in their name. I want to delete them, leaving only files with PET-CAT and PET-HORSE. I'd like to use the find command to locate those files (by using a variable) and then I'd like to delete them. However, I can't find a way to do this. I... (3 Replies)
Discussion started by: newbie2010
3 Replies

3. Shell Programming and Scripting

Using a find command in ssh but using local variables?

I have a script like this (Yes, I know the DAY6 number isn't right - I'm just testing at this point): DAY0=`date -I` DAY1=`date -I -d "1 day ago"` DAY6=`date -I -d "2 days ago"` if then ssh root@synology1 nohup rm -rf "/volume1/Fileserver/$DAY6" fi I've tested the line to remove the... (5 Replies)
Discussion started by: Orionizer
5 Replies

4. Shell Programming and Scripting

Find and replace variables using a csv table

I have a flat file (template) where I want to replace variables based upon a value in another file (csv). The variables in the template are named %VAR_X_z% The values are in the csv file and X is field 0 of each line and y field 1 and up. Example of the csv: Badidas, 13.00, 12.00, 11.00,... (8 Replies)
Discussion started by: biscayne
8 Replies

5. Shell Programming and Scripting

Find global variables, c source

Hello.I have been trying to solve the following problem, but to no avail. If anyone could please give me some indications, or anything, it would be amazing. A C source program and a type name are given. Determine from source, the list of the global variables having the given type. For each... (5 Replies)
Discussion started by: Susan78
5 Replies

6. UNIX for Dummies Questions & Answers

How do I find the correct environment variables for MPI?

Hello all. I've been trying to install NWCHEM in parallel on a new cluster, and have been able to get it to work on single processors by ignoring any MPI environment variables. This is, of course, pretty worthless. So I'm starting over and trying to get thing set up right for the MPI. The key... (6 Replies)
Discussion started by: EinsteinMcfly
6 Replies

7. Shell Programming and Scripting

[Solved] Find Specific records from file and add totals into variables

Hi Eveyone, I am working on one shell script to find the specific records from data file and add the totals into variables and print them. you can find the sample data file below for more clarification. Sample Data File: PXSTYL00__20090803USA CHCART00__20090803IND... (7 Replies)
Discussion started by: veeru
7 Replies

8. UNIX for Advanced & Expert Users

Find in HP,AIX vs Linux

Hi Guys, Wondering if anyone can help me. I have a find command on a Linux box that works as expected: find \( -not -type d -or -not -name log -and -not -name loc -and -not -name usr -and -not -name etc -and -not -name tmp -and -not -name wrk -and -not -name changes -or -prune \) -and -not... (6 Replies)
Discussion started by: bParks
6 Replies

9. UNIX for Dummies Questions & Answers

How to find out the spec of my AIX?

Does anyone know if there are any commands that allow me to find out the spec of my AIX machine? It's RS6000. Thx (2 Replies)
Discussion started by: E-Quality
2 Replies
Login or Register to Ask a Question