ls -l | grep $date (failing) | Unix Linux Forums | Shell Programming and Scripting

  Go Back    


Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

ls -l | grep $date (failing)

Shell Programming and Scripting


Tags
perl, perl shift, shift, shift perl

Closed Thread    
 
Thread Tools Search this Thread Display Modes
    #1  
Old 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 08-01-2005
jim mcnamara jim mcnamara is offline Forum Staff  
...@...
 
Join Date: Feb 2004
Last Activity: 24 April 2014, 4:36 PM EDT
Location: NM
Posts: 10,066
Thanks: 253
Thanked 760 Times in 714 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 Thread

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

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 05:12 AM.