check if multiple directories exist else create missing directories


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting check if multiple directories exist else create missing directories
# 1  
Old 08-18-2009
check if multiple directories exist else create missing directories

Hi ,
I 'm trying to check if multiple directories exist on a server, if not create the missing ones and print " creating missing directory.
how to write this in a simple script, I have made my code complex


Code:
if [ -d "${schemaExtractDir}/SchemaExtract" ]; then
 taskStatus="Schema extract directory exists, checking if SQL,Count and SchExtArchive directories exist."
 print -r "$taskStatus"
 if [ -d "${schemaExtractDir}/SQL" ]; then
  taskStatus="${schemaExtractDir}/SQL directory exists, checking if Count and SchExtArchive directories exists."
  print -r "$taskStatus"
  if [ -d "${schemaExtractDir}/Count" ]; then
   taskStatus="${schemaExtractDir}/Count directory exists, checking if SchExtArchive directory exists."
   print -r "$taskStatus"
   if [ -d "${schemaExtractDir}/SchExtArchive" ]; then
    taskStatus="${schemaExtractDir}/SchExtArchive directory exists."
    print -r "$taskStatus"
   else
    taskStatus="${schemaExtractDir}/SchExtArchive directory does not exist, creating ${schemaExtractDir}/SchExtArchive directory"
    print -r "$taskStatus"
    mkdir -p ${schemaExtractDir}/SchExtArchive 2>/dev/null
   fi
  else
   taskStatus="${schemaExtractDir}/Count directory does not exist, creating ${schemaExtractDir}/Count directory"
   print -r "$taskStatus"
   mkdir -p ${schemaExtractDir}/Count 2>/dev/null
  fi
 else
  taskStatus="${schemaExtractDir}/SQL directory does not exist, creating ${schemaExtractDir}/SQL directory."
  print -r "$taskStatus"
  mkdir -p ${schemaExtractDir}/SQL 2>/dev/null
   taskStatus="Checking if ${schemaExtractDir}/NPICount directory exists."
   print -r "$taskStatus"
    if [ -d "${schemaExtractDir}/Count" ]; then
       taskStatus="${schemaExtractDir}/Count directory exists."
       print "$taskStatus"
    else
       taskStatus="${schemaExtractDir}/Count directory does not exist, creating ${schemaExtractDir}/Count directory"
       print "$taskStatus"
       mkdir -p ${schemaExtractDir}/Count 2>/dev/null
    fi
 fi
else
 taskStatus="Schema extract directory does not exist, creating schema extract,SQL,Count and SchExtArchive directories."
 print -r "${taskStatus}"
 mkdir -p ${schemaExtractDir} 2>/dev/null
 mkdir -p ${schemaExtractDir}/SchemaExtract 2>/dev/null
 mkdir -p ${schemaExtractDir}/SQL 2>/dev/null
 mkdir -p ${schemaExtractDir}/Count 2>/dev/null 
 mkdir -p ${schemaExtractDir}/SchExtArchive 2>/dev/null
fi
chmod 755 ${schemaExtractDir}/SchemaExtract
chmod 755 ${schemaExtractDir}/SQL
chmod 755 ${schemaExtractDir}/Count
chmod 755 ${schemaExtractDir}/SchExtArchive


I want to acheive the above in few steps... not this many if else loops...
how to do it?

thanks
ram

Last edited by Franklin52; 08-19-2009 at 04:09 PM.. Reason: adding code tags
# 2  
Old 08-18-2009
Sounds like you need to do some reading up on select statements ( Bourne/bash shell scripts: case statement | Bourne shell scripting | Tech-Recipes )

eg
Code:
case "$var" in
value1)
commands;
;;
value2)
commands;
;;
*)
commands;
;;
esac

and for loops.
Code:
for ((  i = <start number> ;  i < <finish number>;  i++  ))
do
<commands>
done

So basically you're code will look like this:
Code:
for ((  i = 1 ;  i < 4;  i++  ))
do
	case "$i" in
		'1') dirname="<dir path 1>"
		;;
		'2') dirname="<dir path 2>"
		;;
		'3') dirname="<dir path 3>"
		;;
	esac

	<enter the code for just the one directory here>
done

Basically, where the 1st 4 appears in the 1st line above, change that for the max number off directories you need to check for.

change <dir path 1> to the 1st directory path.
change <dir path 2> to the 2nd directory path....etc

and <enter the code for just the one directory here> put the actual code you were repeating countless times (but only 1 reitteration).
Each time you need to feed in the directory path, use $dirpath instead.
eg
Code:
if [ -d "$dirpath" ]; then


That's the basic theory anyway. I'm half asleep (as it's after midnight in the UK) and coding this directly into Chromium, so you'll have to do the debugging.

Good luckSmilie
# 3  
Old 08-18-2009
Thanks for the reply.
I'm confused with your approach, can you explain it at your convenience.

say my schemaExtractDir="/var/tmp"
I'm checking for multiple directories under it
"$schemaExtractDir/SchemaExtract"
"$schemaExtractDir/SQL"
"$schemaExtractDir/Count"
"$schemaExtractDir/SchExtArchive"

Code:
if [ -d "$schemaExtractDir/SchemaExtract" ]; then
print "SchemaExtract directory exists"
else
mkdir -p "$schemaExtractDir/SchemaExtract" 2>/dev/null
chmod 755 "$schemaExtractDir/SchemaExtract"
fi

If any of these directories are missing; then I need to create the missing directory and print a message to stdout,"creating missing directory "/var/tmp/Count".

Can I check for multiple directories within the red part , if so how do i do it

Last edited by ramky79; 08-19-2009 at 12:49 PM.. Reason: adding code tags
# 4  
Old 08-18-2009
Quote:
Originally Posted by ramky79
Thanks for the reply.
I'm confused with your approach, can you explain it at your convenience.

say my schemaExtractDir="/var/tmp"
I'm checking for multiple directories under it
"$schemaExtractDir/SchemaExtract"
"$schemaExtractDir/SQL"
"$schemaExtractDir/Count"
"$schemaExtractDir/SchExtArchive"

if [ -d "$schemaExtractDir/SchemaExtract" ]; then
print "SchemaExtract directory exists"
else
mkdir -p "$schemaExtractDir/SchemaExtract" 2>/dev/null
chmod 755 "$schemaExtractDir/SchemaExtract"
fi

If any of these directories are missing; then I need to create the missing directory and print a message to stdout,"creating missing directory "/var/tmp/Count".

Can I check for multiple directories within the red part , if so how do i do it
basically to check multiple directories, then you have to put your script inside a loop (so it runs the script several times - each time running it against a different directory)

The loop needs two parts to it:
1/ the loop itself (using for command)
2/ the directory name selector (using case to select which directory name to pass to your script per iteration of the loop)

I've probably still explained this very badly.Smilie
# 5  
Old 08-18-2009
To keep the forums high quality for all users, please take the time to format your posts correctly.
  1. Use Code Tags when you post any code or data samples so others can easily read your code.
    You can easily do this by highlighting your code and then clicking on the # in the editing menu. (You can also type code tags [code] and [/code] by hand.)
  2. Avoid adding color or different fonts and font size to your posts.
    Selective use of color to highlight a single word or phrase can be useful at times, but using color, in general, makes the forums harder to read, especially bright colors like red.
  3. Be careful when you cut-and-paste, edit any odd characters and make sure all links are working property.

Thank You.

The UNIX and Linux Forums
Reply With Quote
# 6  
Old 08-19-2009
Is it OK for you to keep the directories to check in a file, so you check (in)existing directories against the file?

Code:
#!/bin/sh

schemaExtractDir="/var/tmp"
while read dir; do
  dir="$schemaExtractDir/$dir"
  if [ -d "$dir" ]; then
    echo "$dir exists, not creating this dir."
  else
    echo "$dir does not exist: creating one for you..."
    mkdir "$dir"
  fi
done < file

exit 0

file is a text file containing directories to create.
Code:
~$ cat file
SchemaExtract
SQL
Count
SchExtArchive

~$ ./script.sh
/var/tmp/SchemaExtract does not exist: creating one for you...
/var/tmp/SQL does not exist: creating one for you...
/var/tmp/Count exists, not creating this dir.
/var/tmp/SchExtArchive does not exist: creating one for you...

# 7  
Old 08-19-2009
Nicely done
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Shell script to check current date file is created and with >0 kb or not for multiple directories

Hi All, I am new in scripting and working in a project where we have RSyslog servers over CentOS v7 and more than 200 network devices are sending logs to each RSyslog servers. For each network devices individual folders create on the name of the each network devices IP addresses.The main... (7 Replies)
Discussion started by: Pinaki
7 Replies

2. Shell Programming and Scripting

Help with create multiple directories under diff file systems

Hi, Need help ...I want to create multiple directories in different /file systems using for loop..eg.../ORCL_data01/oradata/orcl/ctl. ../ORCL_data01/oradata/orcl/data. ../ORCL_data01/oradata/orcl/redo. Script :- ========= for dir in `ls -d... (8 Replies)
Discussion started by: Linux6.5
8 Replies

3. Shell Programming and Scripting

Single script to create multiple directories

Hi , I want a script to create a directories at different locations. suppose i am on home/path/zone1. I want to create a directory of current month in this location. Then i want to create the same current month directory in home/path/zone2.like this for 9 diffrent zones. I can do this... (4 Replies)
Discussion started by: sv0081493
4 Replies

4. UNIX for Dummies Questions & Answers

Checking if multiple directories exist

I need to create multiple directories if those directories do not exist already. How would you go by doing this. What I have so far. array=(one two three) for I in ${array} do if ] then mkdir ${I} fi doneI have a good feeling this is done incorrectly. The error I am... (2 Replies)
Discussion started by: jrymer
2 Replies

5. UNIX for Dummies Questions & Answers

Create multiple directories with awk

Hello all. Newbie here. In a directory, I have 50 files and one additional file that is a list of the names of the 50 files. I would like to create a directory for each of the 50 files, and I need the 50 directory names to correspond to the 50 file names. I know this can be done by running... (6 Replies)
Discussion started by: Zeckendorff
6 Replies

6. UNIX for Dummies Questions & Answers

Deleting multiple directories inside multiple directories

Hi, Very unfamiliar with unix/linux stuff. Our admin is on vacation so, need help very quickly. I have directories (eg 40001, 40002, etc) that each have one subdirectory (01). Each subdir 01 has multiple subdirs (001, 002, 003, etc). They are same in each dir. I need to keep the top and... (7 Replies)
Discussion started by: kkouraus1
7 Replies

7. Shell Programming and Scripting

how to check existance of multiple directories

Hi, I would like to check whether all the directories exists or not. I tried the below but it gives some error. below is the excerpt from my original script 24 #Check if the required directories are exists 25 dirExists() { 26 27 if 28 then 29 echo "required... (1 Reply)
Discussion started by: lookinginfo
1 Replies

8. Shell Programming and Scripting

Replace missing standard folders from home directories.

Hi, I want to develop a script to replace missing folders from home directories. These may have been deleted by the user. A standard home directory will have these folders in it and nothing else: Desktop, Documents, Downloads, Library, Movies, Music, Pictures, Public, Sites I also want to... (3 Replies)
Discussion started by: z399y
3 Replies

9. Shell Programming and Scripting

moving directories to new directories on multiple servers

Hi - I am new to unix scripts...I need to move several directories on multiple servers to new directories. (0 Replies)
Discussion started by: mackdaddy07
0 Replies

10. Shell Programming and Scripting

Create Folder in Multiple Directories

Hi, I am trying to figure out how to have a folder created in multiple directories. For example /home is where we have over 1500 staff members directories, the staff members name is the name of directory under /home. I need to have a folder called "Desktop" created in every staff members directory.... (15 Replies)
Discussion started by: Stud33
15 Replies
Login or Register to Ask a Question