LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   how to check folder if it has files in it using Bash Shell script (https://www.linuxquestions.org/questions/linux-newbie-8/how-to-check-folder-if-it-has-files-in-it-using-bash-shell-script-824105/)

vincent.dang 08-04-2010 07:00 AM

how to check folder if it has files in it using Bash Shell script
 
Good day gurus!
Say, there is a folder. Its empty. When every I drag a new file and put into it it echo out "there is file in there" and keep monitoring the folder. How can I do it?

Before dragging file into the folder it should appear
[admin@linux shell]$
folder is being monitor....


when I drag a file into the folder it say
[admin@linux shell]$
There is file in folder.....

If no action to be taken, after 300 seconds, it appears like
[admin@linux shell]$
There is file in folder.....
There is file in folder.....

And it keeps going on. Its kinda monitoring and warning people

Please advise...
Thanks in advance

vikas027 08-04-2010 07:06 AM

you can use the below script, I am using it for /tmp you can give any directory (absoulte path) here

Code:

fname=/tmp
c=`ls -l $fname | wc -l`
if [ $c -ge 0 ]
then
echo "$fname has file in it !!!"
fi


catkin 08-04-2010 10:01 AM

Here's an idea. Needs folder name passing to the script. Should have error trap for folder not existing, including when script called without being passed the folder name.
Code:

#!/bin/bash

dir=$1
echo "folder '$dir' is being monitor...."

while true
do
    [[ "$( echo "$dir/"* )" != "$dir/*" ]] && echo "There is file in folder '$dir' ....."
    sleep 300
done

Incidentally, "folder" is Windows-speak, is "directory" in Linux-speak.

jthill 08-05-2010 08:18 AM

The linux facility for watching for changes is "inotify", and there's a package inotify-tools to use it from the shell. "inotifywait" in that package does everything you want.

vincent.dang 08-05-2010 06:39 PM

thanks for your help. I appreciate it

ghostdog74 08-05-2010 07:24 PM

Quote:

Originally Posted by vikas027 (Post 4055409)
you can use the below script, I am using it for /tmp you can give any directory (absoulte path) here

Code:

fname=/tmp
c=`ls -l $fname | wc -l`
if [ $c -ge 0 ]
then
echo "$fname has file in it !!!"
fi


the result of ls -l on an empty directory gives "total 0". If you pipe to wc, it will be counted as one.

vincent.dang 08-05-2010 07:49 PM

However, I come up with this solution:
Quote:

while true; do
if [ "$(ls -A $dir)" ]; then
echo "--------------------------------------------"
echo "File exists..."
for var in $dir/*; do
echo "The file name is: $(basename $var)"
done
else
echo "There is no file in this directory.."
echo "the directory is being monitored"
fi
echo "refresh after 10 seconds"
sleep 10
done
The above is what exactly I need...
Anyway, thanks for you helps guys!!!

GrapefruiTgirl 08-05-2010 07:58 PM

Nice work - you got a working solution. If you are happy with that, you can mark this [SOLVED] using "Thread Tools" above the first post.

P.S. - it might make for a nicer (easier to read) display output from the script, if you put a "clear" command after the "sleep" command.

Cheers,
Sasha


All times are GMT -5. The time now is 07:44 PM.