Files with 0 file size and created today


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Files with 0 file size and created today
# 1  
Old 11-19-2008
Files with 0 file size and created today

hi,

I am building a script to identify those files created/modified today and with file size 0. I am able to find the files with 0 file size and created/modified in last 24 hrs as shown below but not today (current date), I tried using (touch -t time filenm) but in my version of unix at work it does not allow me to, please post if somebody has an alternative solution,

Here is my current script,

cd /usr/local/upload;
for i in *;do
if [ -f $i ];then
if [ ! -s $i ];then
find $i -type f -mtime -1;
fi
fi
done >> usr/file3.txt

Thanks for looking into it.
# 2  
Old 11-20-2008
Quote:

I tried using (touch -t time filenm) but in my version of unix at work it does not allow me to, please post if somebody has an alternative solution,
The touch method is the one you want, what error do you get when you try touch?
# 3  
Old 11-20-2008
Following is the error I get

usage: touch [-amcf] file ...
# 4  
Old 11-21-2008
hmm. Are you on solaris - is there a modern version of touch in the xpg4 directory?

If all else fails -- Here is some older code that sets filetimes. You can try it.
Code:
/* 	mytouch.c  set file mtime & atime        
   	usage: mytouch newfiletime  [file ... ]
   	      source | mytouch newfiletime
	where newfiletime is ONLY one of
	YYYY-mm-dd or today or yesterday
	POSIX.1 version
*/
#define  _INCLUDE_POSIX_SOURCE
#include <utime.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <limits.h>
#include <ctype.h>
#include <errno.h>
#ifndef PATH_MAX
#define PATH_MAX _POSIX_PATH_MAX
#endif
static char *fmt="%Y-%m-%d";

void usage()/* error message */
{
	fprintf(stderr,"%s%s%s",
		"usage: mytouch newfiletime  [file ... ]\n",
		" where newfiletime is ONLY one of: \n",
		"  YYYY-mm-dd (YYYY is 1970-2037)\n  today\n  yesterday\n");
	exit(1);
}

char *today(int which)  /* yesterday & today only */
{
	static char t[80]={0x0};
	time_t lt=time(NULL)-(86400 * which);

	struct tm *tmptr=localtime(&lt);
	(void)strftime(t, sizeof(t), fmt, tmptr);

	return t;
}
/* create struct tm for date desired*/
time_t conv(const char *tspec)
{
	struct tm tms;
	char tmp[80]={0x0};
	int yr=0;

    strcpy(tmp, tspec);
	if(strcmp(tmp, "today")== 0)
		strcpy(tmp, today(0));
	if(strcmp(tmp, "yesterday")== 0)
		strcpy(tmp, today(1));
	yr=atoi(tmp);	
	if( yr > 2037 || yr < 1970 || strptime(tmp, fmt, &tms)==NULL)
		usage();

	return mktime(&tms);
}
/* check file existence && create - set mtime && atime*/
void set_utimes(char *filespec, struct utimbuf *ut)
{	
	FILE *tmp=NULL;

	if(access(filespec, F_OK)== -1 )
	{
		tmp=fopen(filespec, "a");
		if(tmp!=NULL)
			(void)fclose(tmp);
		else
		{
			perror("Cannot create file");
			exit(1);
		}
	}
	if(utime(filespec, ut)== -1)
	{
		perror("File access error");
		exit(1);
	}
}

char *check(char *value, const size_t len) /*limited validation*/
{
	if(*value && memchr(value, 0, len + 1)!=NULL)
	{
		char *p=strchr(value, '\n');
		if(p!=NULL) *p=0x0;
		for(p=value; *p && isprint(*p); p++);
		if(*p)
			usage();
		return value;
	}
	usage(); /* everything else is an error */
}

int main(int argc, char **argv)
{
	char filename[PATH_MAX]={0x0};
	int i=0;

	if(argc > 1)
	{
		time_t when = conv(check(argv[1], 10 ));
		struct utimbuf ut={when, when};
		if(argc > 2)
			for(i=2; i < argc; i++)
			   set_utimes(check(argv[i], PATH_MAX), &ut);

		if(argc == 2)
			while(fgets(filename, sizeof(filename), stdin)!=NULL)
                set_utimes(check(filename, PATH_MAX), &ut);
	}
	if(argc== 1)
		usage();

	return  0;
}

# 5  
Old 11-21-2008
Hammer & Screwdriver Here is a way to approach

although, it can probably be simplified...

Code:
> cat today_empty.sh
#! /usr/bin/bash
# script to show empty files created on this day
# original posting to www.unix.com


ls >today_empty_mylist
month=$(ls -l today_empty_mylist | awk '{print $6}')
day=$(ls -l today_empty_mylist | awk '{print $7}')
#echo $month $day

while read myfile
   do
   if [ -s $myfile ]
      then
      continue
   fi

#   ls -l $myfile

   ls -l $myfile | awk -v mon=$month -v day=$day '$6==mon && $7==day {print $9}'
done<today_empty_mylist

# 6  
Old 11-21-2008
Isnt this what you want?
Code:
find . -ctime -1 -type f -size 0 -exec ls -l {} \;

My bad, you want just current date...

This is kinda crude but it could work:
Code:
find . -ctime -1 -type f -size 0 -exec ls -l {} \;  | grep "`date '+%b %d`"

EDIT:
Problem ran into with previous,:
If date is 1 digit it gives "Dec 01", where ls -l is in "Dec 1" format, on my CentOS anyway.

Last edited by Ikon; 11-21-2008 at 04:33 PM..
# 7  
Old 11-21-2008
I think this is the issue
The old version of touch does not allow the creation of a filetime on a comparison file,
- for example the OP wants to be able to create a file with a filetime like this:
Code:
-rw-rw-rw-   1 jmcnama    prog             0 Nov 21 00:00 a.lis

Where Nov 21 00:00 has to be dynamic, and is today's first second.

ctime is just the time the inode was changed - nothing else. It is not a create date - they do not exist in standard UNIX.

If the OP has perl v 5.8 you can write perl code to do this. I posted ancient POSIX.1 C code that does that and some other stuff - poorly. If we knew the OS and version it might help. If the OP could compile gnu version of touch that would be good.

Otherwise I have misunderstood completely.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Listing the file name and no of records in each files for the files created on a specific day

Hi, I want to display the file names and the record count for the files in the 2nd column for the files created today. i have written the below command which is listing the file names. but while piping the above command to the wc -l command its not working for me. ls -l... (5 Replies)
Discussion started by: Showdown
5 Replies

2. Linux

List all files created today exclude last one

Hi, ALL thanks in advance, i listed all files using this command ls -ltr $(date +%Y%m%d)*.xmlbut i would like to exclude the last one created ; Best regard MEROUAN Use code tags, thanks. (4 Replies)
Discussion started by: merouan
4 Replies

3. Shell Programming and Scripting

How to find files created today in a particular directory?

Dear All, I want a Hp Ux command to find out the files created today in a particular directory or mountpoint. Kindly help. Thanks Bhaskar (10 Replies)
Discussion started by: sudiptabhaskar
10 Replies

4. UNIX for Advanced & Expert Users

default size of a newly created folder

Hi all, In linux how to create a directory with specified size, so that it can be used only up to the mentioned size. Actually my question is, whether we can do directory quota in linux. mounting the directory in a partiton will do that, but do we have any other option... (1 Reply)
Discussion started by: anishkumarv
1 Replies

5. Shell Programming and Scripting

check file exists and created today issue

Morning My other issue I have seems very simple but im just not seeing it. I have a script that checks on a remote share to see if the backups for some systems have run. Its as simple as: find /mnt/ukwcs-net-config/WLAN-Controllers/ -mtime -1 -ls | egrep '(cfg)' > wlanlog.txt cut -c 1-92... (4 Replies)
Discussion started by: ltodd2
4 Replies

6. Shell Programming and Scripting

ftp - How to download files which created today?

Hello experts, I have written following script to download files which created today. Unfortunately, it's not working. test.ksh: #Defining variables USR='xxx' PASSWD='yyyy' HT='test.test.com' FILE='S*.pdf' XFILE=$(echo find . -type f -mtime 0) ZFILE=$(echo ls -tR|grep 'Jun 8')... (14 Replies)
Discussion started by: dipeshvshah
14 Replies

7. UNIX for Advanced & Expert Users

AT can't be created for you. Max size of the queue is reached..

I have a listener (a batch job written in shell script) that calls a perl file (say apple.pl). The listener runs at scheduled timing (say 11 pm to 6 am)&. Owner of the listener is a common id. My question is.. Once the listener starts running (here, Im NOT attempting to generate any reports... (1 Reply)
Discussion started by: vavjeeva
1 Replies

8. Shell Programming and Scripting

Calculate Files Created Today

I need to figure out how to get all the files from a certian dir ./123/*sat files and ./230/*sat files and several other directories which have these *sat files in them. I need to calculate how many were created today and how many yesterday from 2:00 pm on the 28th to 2pm on the 29th. It's a... (1 Reply)
Discussion started by: xgringo
1 Replies

9. UNIX for Dummies Questions & Answers

To list all the files created today with directory path

Hi, Can any one tell the command to list all the files that are created as of today from all the directories? The Command "ls -ltR" is listing all the files. But I want the list of files that has been created as of today along with the directory path:) Thank you in advance.:) Regards,... (4 Replies)
Discussion started by: meetusha.b
4 Replies

10. UNIX for Dummies Questions & Answers

Archiving Files by selecting years file created

I have recently taken on a new position and want to clean up several file locations that currently hold data back through 1999. While I need to keep this data for business reasons, I have created directories to help sort out the individual years. Is there a quick command that I can use to archive... (2 Replies)
Discussion started by: dmhammond
2 Replies
Login or Register to Ask a Question