Script to delete files older than x days and also taking an input for multiple paths
Hi ,
I am a newbie!!!
I want to develop a script for deleting files older than x days from multiple paths. Now I could reach upto this piece of code which deletes files older than x days from a particular path. How do I enhance it to have an input from a .txt file or a .dat file? For eg: For deleting *.csv files older than Num_days, I am using below piece of code:
You could read the paths from the file using a while loop. Then call find once per path, substituting the value read into the find command twice, as the path argument and the argument to the first -name predicate.
There are several ways to do this. Assuming there are no whitespace characters in any of the directory names in the list of directories in your text file, the following is probably the shortest:
If there might be space or tab characters in directory names:
If there are any newline characters in the directory names in your list, you have my sympathy and will not be able to use anything that has a newline separated list of directories (i.e., a text file) to store the directory list.
Last edited by Don Cragun; 10-05-2012 at 12:50 PM..
Reason: fix typo
This User Gave Thanks to Don Cragun For This Post:
Don, is there a reason to not simply override IFS in read's environment? Also, I may be overly paranoid, but I use -r to defend against backslashes.
Regards,
Alister
---------- Post updated at 12:29 PM ---------- Previous update was at 12:05 PM ----------
Quote:
Originally Posted by Don Cragun
Because of -name . -prune not matching the current path, neither of those will work correctly.
A cd fixes the second suggestion:
If the paths are absolute, the subshell isn't needed.
An unwieldy solution that doesn't cd:
For find implementations which support a -maxdepth primary (GNU, *BSD, etc) which simplifies restricting the traversal:
Regards,
Alister
Last edited by alister; 10-05-2012 at 01:50 PM..
These 2 Users Gave Thanks to alister For This Post:
Don, is there a reason to not simply override IFS in read's environment? Also, I may be overly paranoid, but I use -r to defend against backslashes.
Regards,
Alister
---------- Post updated at 12:29 PM ---------- Previous update was at 12:05 PM ----------
Because of -name . -prune not matching the current path, neither of these will work correctly.
I suggest (untested):
Some find implementations (GNU, *BSD) support a -maxdepth primary which makes it simpler to restrict traversal to a max level:
Regards,
Alister
Using read's -r option is a good idea for this application, and just setting IFS for the read is also fine.
Depending on what I'm doing, I frequently just set IFS="" at the start of a script knowing that it won't affect the invoking shell execution environment. I saved and restored it here in case someone runs this code without putting it in a subshell environment; but just setting it for read has the same effect.
Hi,
I have multiple files in my log folder. e.g:
a_m1.log
b_1.log
c_1.log
d_1.log
b_2.log
c_2.log
d_2.log
e_m1.log
a_m2.log
e_m2.log
I need to keep latest 10 instances of each file.
I can write multiple find commands but looking if it is possible in one line.
m file are monthly... (4 Replies)
hi i need a script to delete the files older than 2 days...
if my input is say in a folder versions
A_14122012.txt
A_15122012.txt
A_16122012.txt
A_17122012.txt
i want my output to be
A_16122012.txt
A_17122012.txt
thanks in advance
hemanth saikumar. (2 Replies)
Hi All,
I am using below code to delete files older than 2 days. In case if there are no files, I should log an error saying no files to delete.
Please let me know, How I can achive this.
find /path/*.xml -mtime +2
Thanks and Regards
Nagaraja. (3 Replies)
Hi all,
I want to delete log files with extension .log which are older than 30
days. How to delete those files?
Operating system -- Sun solaris 10
Your input is highly appreciated.
Thanks in advance.
Regards,
Williams (2 Replies)
i have to delete files which are older than 15 days or more except the ones in the directory Current and also *.sh files
i have found the command for files 15 days or more older
find . -type f -mtime +15 -exec ls -ltr {} \;
but how to implement the logic to avoid directory Current and also... (3 Replies)
I will like to write a script that delete all files that are older than 7 days in a directory and it's subdirectories. Can any one help me out witht the magic command or script?
Thanks in advance,
Odogboly98:confused: (3 Replies)