Please pardon the simplicity of this question, I kind of got thrown into these responsibilities at the last minute without training.


I
I need to move a file called status10.dat to a different directory using korn scripting.

cp status10.dat* /cerner/d_p19/ccluserdir

I only want to do this if the file is equal to today's date. Is it possible to check before moving the file?

Thanks in advance

Hi There,

That shouldn't be a problem at all.

Depending on what you want to do you can use find to get all files created within the last 24 hours (assuming /home as your current directory):

for x in `find /home -mtime 0`
do
mv $x /cernet/d_p19/ccluserdir/.
done

you can also use the -exec option of find to do the mv for you so you'd just have a one-line find script.

Hope this helps :)

, Mike

Hey, I just noticed that I misread your question - you need stuff from "today" and not the last 24 hours -- sorry - maybe that other info will be useful for another project.

If you want to only delete files from today, I think the simplest way to do it - to avoid the possible issues with spacing and/or tabbing would be to write a script that took a date argument in the following format:

./yourscript "Oct  3"

or

./yourscript "Oct 24"

Note that in the "Oct 3" there are two spaces separating the month and date and that "Oct 24" only has one space separating - this is to accommodate the behavious of "ls -l" -- at least, on solaris.

yourscript would be (assuming we're running it from the directory your files are in)

#!/bin/ksh

today=$1

for x in `ls -ld *`
do
      filename=`echo $x|awk '{print $1}'`
      result=`echo $x |grep $today >/dev/null 2>&1`
      if [ $? -eq 0 ]
      then
            mv $filename /cernet/d_p19/ccluserdir/.
      fi
done 

I tend to write the short-stuff like I think. There's probably an easier way to do it :)

Thanks, Mike

Edited 3 Years Ago by pyTony: fixed formatting

find /path -type f -name "status10.dat*" -mtime 0 -print0 | xargs -i -0 cp "{}" /cerner/d_p19/ccluserdir
This article has been dead for over six months. Start a new discussion instead.