Unix/Linux Go Back    


Shell Programming and Scripting Unix shell scripting - KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and shell scripts and shell scripting languages here.

ls -l | grep $date (failing)

Shell Programming and Scripting


Tags
perl, perl shift, shift, shift perl

Closed Linux or Unix Question    
 
Thread Tools Search this Thread Display Modes
    #1  
Old Unix and Linux 08-01-2005
yongho yongho is offline
Registered User
 
Join Date: Jun 2005
Last Activity: 4 August 2005, 5:20 PM EDT
Location: New York City
Posts: 95
Thanks: 0
Thanked 0 Times in 0 Posts
ls -l | grep $date (failing)

Example file list

Code:
> ls -l
-rwxr-xr-x   1 .......  ......      1707 Feb  5  2004 file1
-rwxr-xr-x   1 .......  ......       175 Jan 21  2005 file2
-rwxr-xr-x   1 .......  ......        95 Apr  1 16:15 file3

The Script

Code:
#!/bin/ksh

# date variables
start_date_Y=`date +%Y`   # year  (ie: 1998, 2005)
start_date_b=`date +%b`   # month (ie: Jun, Jul)
start_date_d=`date +%d`   # day   (ie: 09, 25)

# format the date value for day for `ls -al | grep <date>`
# ex: converts day value of '01' into ' 1' or '09' to ' 9', etc)
typeset -L1 get_first_char  # used to get first character of `date +%d`
typeset -R1 get_second_char # used to get second character of `date +%d`
get_first_char="$date_d"
get_second_char="$date_d"
if (( get_first_char==0 )); then
    date_d=" ${get_second_char}"
fi

ls -l | grep "$date_b $date_d"

I've read somewhere on this forum that when doing an ls -l command, files that are older than 6 months will be displayed (Mmm dd yyyy) as opposed to (Mmm dd hh:ss). My script doesn't account for this.

Can anyone suggest the workaround for this?

Last edited by yongho; 08-01-2005 at 11:54 AM..
Sponsored Links
    #2  
Old Unix and Linux 08-01-2005
jim mcnamara jim mcnamara is online now Forum Staff  
...@...
 
Join Date: Feb 2004
Last Activity: 5 May 2015, 8:54 AM EDT
Location: NM
Posts: 10,440
Thanks: 332
Thanked 859 Times in 798 Posts
file times are a pain in the butt.

try using the script attached below like this:

Code:
# find files from january 01 2005
for file in `ls -1`
do
      filetime.pl $file | grep -q 20050101
      if [ $? -eq 0 ] ; then
             echo "$file"
      fi
done


Code:
#!/usr/bin/perl
# point the above to the locaction of perl on your system
#^ PROGRAM DESCRIPTION
#^ -------------------
#^ This program prints the modification times of files.
#^ It uses the following format:  inodetime.pl filename
#^ It will accept:  inodetime.pl filename1 filename2 filename3
#^                  inodetime.pl /tmp/file*
#^ The format of the output is: YYYYMMDDhhmmss filename
#^ example:
#^           $ filetime.pl /tmp/t*
#^           19961115105425 /tmp/test.sql 
#^           19970116113616 /tmp/tststat.pl 
#^ 

############################################
# Get the (next) input from the command line 
############################################
while ($curfile = $ARGV[0])
{
   #################################################
   # Do following code block only if $curfile exists
   #################################################
   if (-e $curfile)
   {

      # stat structure into variables

      ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
      $atime,$mtime,$ctime,$blksize,$blocks)
      = stat("$curfile");

      # time structure into variables

      local($sec,$min,$hr,$day,$mon,$yr,$wday,@dntcare) = localtime($mtime);
      $yr = ($yr>=70) ? $yr+1900 : $yr+2000;
      $yr="$yr";
      $mon = (++$mon < 10) ? "0$mon" : "$mon";
      $day = ($day < 10) ? "0$day" : "$day";
      $hr  = ($hr < 10) ? "0$hr" : "$hr";
      $min = ($min < 10) ? "0$min" : "$min";
      $sec = ($sec < 10) ? "0$sec" : "$sec";

      # Rearrange in the YYYYMMDDhhmmss format and assign to $dte variable

      $dte = join('',$yr,$mon,$day,$hr,$min,$sec);

      # Print modification date and filename

      print ("$dte\n");
      }

   # Shift to next position in command line
   shift (@ARGV);
}

Sponsored Links
Closed Linux or Unix Question

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Unix or Linux Image More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
grep with date giridhar276 Shell Programming and Scripting 7 12-11-2011 03:34 PM
Calculating expiry date using date,sed,grep r4v3n Shell Programming and Scripting 5 10-24-2011 11:51 AM
Grep date from ls -l GenMen Shell Programming and Scripting 1 05-01-2008 09:53 PM
grep time and date ayhanne Shell Programming and Scripting 8 01-06-2008 08:12 AM
grep using date format ali560045 Shell Programming and Scripting 4 12-26-2007 07:59 AM



All times are GMT -4. The time now is 09:16 AM.