Foreach loop through subdirectories in csh


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Foreach loop through subdirectories in csh
# 1  
Foreach loop through subdirectories in csh

Hi

You might find it very trivial but actually don't know how to loop through all sub-directories and their child directories into a csh. bash was easier I believe but here I am, stuck with csh. So elaborately here's my problem:
Let's say I have my parent directory named C-H/ under which I have C2H3O1/, C2H4O1/...let's say under C2H3O1/ I have several subdirectories like CH2CH2OH/, CH3CH2O/, CH3CHOH/. Inside each sub-directories I have several child directories likeVAS-S0001-001-Ru_001/,VAS-S0001-002-Ru_001/,VAS-S0001-003-Ru_001/. Inside all of them reside OPT-0/, OPT-1/ inside which my job input files and job scripts reside. I wrote a script that I'd like to run inside each child directory that modifies some input files and submits the job. I would like to run my script one time under C-H that'll go through each directory and submit my job.

Here's the silly thing that I have:
Code:
#!/bin/csh
set dir=`*/*/*/*/`
foreach $dir
 /scratch/scratchdirs/sol/Scripts/QMcalc/GEN_POSCAR
end

I know I'm doing something very very wrong, I don't have a counter for the foreach but how do I set that since the number of directories might be different for different cases? Thanks a lot!
# 2  
You are *really* close:
Code:
#!/bin/csh
set dirs=`*/*/*/*/`
foreach dir ($dirs)
 cd $dir
 /scratch/scratchdirs/sol/Scripts/QMcalc/GEN_POSCAR
end

This User Gave Thanks to Smiling Dragon For This Post:
# 3  
If you want the whole directory tree:
Code:
set dirs=`find . -type d`

This User Gave Thanks to MadeInGermany For This Post:
# 4  
Thanks a lot guys! Still I'm having this problem:
Code:
/scratch/scratchdirs/sol/Scripts/QMcalc/GEN_POSCAR: Command not found.
/scratch/scratchdirs/sol/Scripts/QMcalc/GEN_POSCAR: Command not found.
./abc/OPT-0: No such file or directory.

P.S. I just created some directories named abc, def and some subdirectories like OPT-0,OPT-1 to test it. If I directly go to the directory and run my script it works, so I think the script is fine.
smiling dragon, your code:
#!/bin/csh set dirs=`*/*/*/*/` foreach dir ($dirs) cd $dir /scratch/scratchdirs/sol/Scripts/QMcalc/GEN_POSCAR endShould it be
Code:
cd $dir

or
Code:
cd $dirs

? I tried both but for
Code:
cd $dirs

it says too many arguements. Can you kindly explain why it's
Code:
cd $dir

? Again thanks guys, really appreciate this.
# 5  
dirs is a list of all directories.
The loop variable dir picks one directory at a time.
Test it with
Code:
echo $dirs
foreach dir ($dirs)
  echo $dir
end

We all thought that your script is /scratch/scratchdirs/sol/Scripts/QMcalc/GEN_POSCAR.
Is it different from the script that manually run?
This User Gave Thanks to MadeInGermany For This Post:
# 6  
No, that's the same script :/
# 7  
Please give the shebang (1st line) of your script!
This User Gave Thanks to MadeInGermany For This Post:
 

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #382
Difficulty: Medium
HP-UX 11i V3 Release B.11.31 is registered as UNIX V7 compliant.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Foreach loop with two variables

I need to put together a script that will take the contents of two different files (database name and database owner) and put them in two variables within a line: foreach x (`cat /local/hd3/dba/tools/build_db_scripts/dbs`) foreach z (`cat /local/hd3/dba/tools/build_db_scripts/dbas`)... (6 Replies)
Discussion started by: deneuve01
6 Replies

2. Shell Programming and Scripting

Foreach: Words not parenthesized. csh

Just started shell scripting for the first time today :D Can anyone tell me why I get the error "foreach: Words not parenthesized." for my following code? The program takes in a list of arguments. foreach card ($argv) echo Hello end (3 Replies)
Discussion started by: pkuebler
3 Replies

3. UNIX for Dummies Questions & Answers

foreach loop in csh

Hi everyone I'm new to unix and encountered a small problem i couldnt find out a reason why it doesn't work..please help.. in my csh script when i tried to use the foreach loop like this: foreach x ( ls ) echo $x end when i tried to run it, it printed out 'ls' to the std out instead of... (3 Replies)
Discussion started by: ymc1g11
3 Replies

4. UNIX for Dummies Questions & Answers

Foreach loop that skips the header line of a file (csh)

Hello all, I'm working on a foreach loop to compare a couple sets of data. However, each datafile includes a header row. I'm wondering if it is possible to tell the foreach loop to skip the first line of data. I've been using the basic code as follows: foreach line ("`file.csv`") set... (2 Replies)
Discussion started by: meteorologistks
2 Replies

5. Shell Programming and Scripting

How to loop(Iterate) through List with foreach(csh)

Hey all,, I know cshell is harmful:) but I am using this just "to know" - for educational purposes!... not for a long-term use. lets say i have a list.. set arr=(x y z e f) I wanna iterate the list with foreach ,, not with while.!! foreach i $arr echo $i end does not work (2 Replies)
Discussion started by: eawedat
2 Replies

6. Shell Programming and Scripting

foreach in csh

I have a foreach loop in a csh script and I noticed that it tries to find the files with the pattern *$searchpt* in the file name. I'm confused as I never specified checking for the files. foreach f ( *$searchpt* ) set fnew = `echo $f | awk -v searchpat=$searchpt \ ... (1 Reply)
Discussion started by: kristinu
1 Replies

7. Shell Programming and Scripting

foreach loop

Hi everyone Does anyone know what is wrong with this script. i keep getting errors foreach filename (`cat testing1`) set string=$filename set depth=`echo "$string" echo $depth end the error is the following testing: line 1: syntax error near unexpected token `(' testing: line 1:... (3 Replies)
Discussion started by: ROOZ
3 Replies

8. Shell Programming and Scripting

foreach loop + 2 variables

In a foreach loop, is it possible for the loop to go through 2 arguments instead of one i.e. instead of foreach i (do stuff for i), we have foreach i j(do stuff for i; do stuff for j) I am working under BASH and TCSH shell environments cheers (3 Replies)
Discussion started by: JamesGoh
3 Replies

9. Shell Programming and Scripting

foreach loop

Hi Guys, I have a loop which uses a wildcard i.e. foreach f (*) but when I execute the tcsh file in unix then it gives me an error ->>>>>>>foreach: words not parenthesized<<<<<<<<<<- Any help. (1 Reply)
Discussion started by: abch624
1 Replies

10. Shell Programming and Scripting

Foreach loop

What am I doing wrong with this foreach loop? foreach var ($argv) @sum = $sum + $var (4 Replies)
Discussion started by: haze21
4 Replies

Featured Tech Videos