Sponsored Content
Top Forums Shell Programming and Scripting check if directory and file exists Post 302439121 by ddreggors on Thursday 22nd of July 2010 12:04:57 AM
Old 07-22-2010
Quote:
Originally Posted by citaylor
Code:
if [ -d "$PATHLOGS/$DATE1" -a -d "$PATHLOGS/$DATE2" ]; then
  for files in `ls -A PATHLOGS/$DATE1`
  do
    if [ -s "$files" ]; then
      cp $files $TMP/logs_tmp
    fi
  done
fi

citaylor uses gives a good example, however to not incur the overhead of a seperate subshell (backticks open a new shell) in your for loop...
I would actually allow the shell to do some of that work.


Code:
#!/bin/bash

# With shell 'globbing' the '$PATHLOGS/$DATE1/* ' in the for loop below
# will be expanded to "ls $PATHLOGS/$DATE1/* " without the
# overhead of a new shell or even the "ls" command!

if [ -d "$PATHLOGS/$DATE1" -a -d "$PATHLOGS/$DATE2" ]; then
  for f in $PATHLOGS/$DATE1/*  #<------ Shell 'globbing' & expansion
  do
    if [ -s "$f" ]; then
      /bin/cp $f $TMP/logs_tmp
    fi
  done
fi

Another example that would be even more simple would be:

Code:
#!/bin/bash
if [ -d "$PATHLOGS/$DATE1" -a -d "$PATHLOGS/$DATE2" ]; then
    find $PATHLOGS/$DATE1 -type f ! -size 0 -exec cp -v {} $TMP/logs_tmp \;
fi

To explain:

The find command will look under '$PATHLOGS/$DATE1' for all files that exist and are not folders (-type f) that are not 0 bytes (! -size 0).
Next it will execute a copy command on all files found matching our requirements and copy them to $TMP/logs_tmp ('-exec cp -v {} $TMP/logs_tmp \;').

The '{}' is a place holder for each file as it finds them, and the '\;' at the end is to tell find that this is the end of the exec command.
The nature of the find command is to act on each file as it finds them, much like a for loop would. This way it can exec the command on each file one by one.

Note that the semicolon must be escaped (hence the '\;').
Also note the space between the '!' (not modifier) and the '-size' flag.
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

check if directory exists

Hi, I need to prompt for a response from a user to enter a path read dest_dir?"Please Enter Directory :" How do I do this until a valid directory is entered by the user. I can use to check the existence of the directory. However when I try the following I cannot get it to work. while ... (2 Replies)
Discussion started by: jerardfjay
2 Replies

2. Shell Programming and Scripting

how to check if masked directory exists?

I'm trying to write a script that identifies whether a directory of the form AWL.????????.IP exists. I have one that exists which is AWL.05301032.IP. When I test like this: If ] I get true, but when I test like this: If ] Or like this If ] Or any other variation of wild cards, I... (4 Replies)
Discussion started by: philplasma
4 Replies

3. UNIX for Dummies Questions & Answers

How can I check if directory exists in a makefile

Hi. I what to write a make file that inside a target I want to check if a directory exists. some like: ### make a: if ;then <command 1> else <command 2> fi ### make end Thanks a lot ---------------------- (2 Replies)
Discussion started by: zivsegal
2 Replies

4. Shell Programming and Scripting

my scripts does not check if directory exists

Hello: Can someone please help me figure out what is wrong here, my script does not move on to the "else" part even though there is no .ssh directory on my remote server: $more putkey.sh #!/bin/ksh for server in `cat list` do if ; then cat $HOME/.ssh/id_rsa.pub |ssh $server ' cat >>... (4 Replies)
Discussion started by: Sara-sh
4 Replies

5. Shell Programming and Scripting

check if a directory exists if not make it

Hey guys im trying to check if the directory exists i get a syntax error on the elif statement iv tried using else and still same result im not sure. If the directory does not exist can i just insert mkdir /tmp/old under the elif once that part gets working if ; then #do nothing elif echo... (20 Replies)
Discussion started by: musicmancanora
20 Replies

6. Shell Programming and Scripting

How to check if a file exists in a directory?

I want to perform SQL *Loader operation only if a file named "load.txt" exists in a directory "/home/loc/etc". Please help how to check this with a if condition. (8 Replies)
Discussion started by: vel4ever
8 Replies

7. Shell Programming and Scripting

how to check if a directory exists or not.if not need to create it

Hi, I am using solaris 10 OS and bash shell.just checking for small code snippet which follows below. /export/home/vomappservers/spa/common/5.0 /export/home/vomappservers/spa/common/scripts /export/home/vomappservers/spa/tools /export/home/vomappservers/spa/scm5.0/SCCS... (5 Replies)
Discussion started by: muraliinfy04
5 Replies

8. Shell Programming and Scripting

How to check if the file exists in directory?

Hi Gurus, I have a requests to find if all the file in the filelist exist in certain directory. example: my filelist abc def ddd cde afg how can I find these 5 files exists at director /home/abc Thanks in advance (7 Replies)
Discussion started by: ken6503
7 Replies

9. Shell Programming and Scripting

Check whether file exists in directory

Hi guys, I am beginner trying to learn unix. So any help is welcomed. My requirement is to check whether is a file exists in a particular directory or not. The directory path and filename are taken dynamically with user interaction. So the program should continue only if the $filename... (1 Reply)
Discussion started by: maris_markur
1 Replies

10. UNIX for Beginners Questions & Answers

Check that at least one file exists in the directory.

There are some files with suffix dates like abc_20032019.dat abc_17032019.dat If at least one file exists then perform some operation else exit from execution. Korn shell ---------------------------------- array=($inputdir/abc*.dat) If ] ] then echo " file exits" else echo " file does... (10 Replies)
Discussion started by: Rajesh123
10 Replies
shells(4)							   File Formats 							 shells(4)

NAME
shells - shell database SYNOPSIS
/etc/shells DESCRIPTION
The shells file contains a list of the shells on the system. Applications use this file to determine whether a shell is valid. See getuser- shell(3C). For each shell a single line should be present, consisting of the shell's path, relative to root. A hash mark (#) indicates the beginning of a comment; subsequent characters up to the end of the line are not interpreted by the routines which search the file. Blank lines are also ignored. The following default shells are used by utilities: /bin/bash, /bin/csh, /bin/jsh, /bin/ksh, /bin/pfcsh, /bin/pfksh, /bin/pfsh, /bin/sh, /bin/tcsh, /bin/zsh, /sbin/jsh, /sbin/sh, /usr/bin/bash, /usr/bin/csh, /usr/bin/jsh, /usr/bin/ksh, /usr/bin/pfcsh, /usr/bin/pfksh, /usr/bin/pfsh, and /usr/bin/sh, /usr/bin/tcsh, /usr/bin/zsh. Note that /etc/shells overrides the default list. Invalid shells in /etc/shells may cause unexpected behavior (such as being unable to log in by way of ftp(1)). FILES
/etc/shells lists shells on system SEE ALSO
vipw(1B), ftpd(1M), sendmail(1M), getusershell(3C), aliases(4) SunOS 5.10 4 Jun 2001 shells(4)
All times are GMT -4. The time now is 07:25 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy