Sponsored Content
Top Forums UNIX for Dummies Questions & Answers Shell Script to Delete 1 folder and keep 5 Post 302429389 by greendevil on Monday 14th of June 2010 10:18:20 AM
Old 06-14-2010
Shell Script to Delete 1 folder and keep 5

I have situation that I had originally thought would be easily remedied until I learned more about how -mtime actually works.

We have one server that collects backups from a number of other servers. The backup server is limited in space (for reasons that predate my employment). The standard here is to maintain 5 days worth of backup folders in each subdirectory.

Also- I should mention that this is a Windows server and I am using cygwin to run linux scripts.

For the purpose of example, here is the how the directory structure is setup;

g/backup/subdir

Within subdir, the backups directories simply have dates, so under subdir, you'd see;

2010-6-10 2010-6-11 2010-6-12 2010-6-13 2010-6-14 2010-6-15

The goal is to maintain 5 days and delete the 6th day's folder...

The script that I have setup to run against a directory like this is;
Code:
cd /cygdrive/g/backup/subdir
 
/usr/bin/find . -name "20*" -mtime -type d -execdir /usr/bin/rm -r '{}' \;

Now- here's the catch. The backup folders (2010-6-15) don't all get created at the exact same time. In fact for some, the times can vary greatly- from 7pm to 3am. This is where I think it breaks down when trying to use -mtime, since it's actually looking at the number of seconds, not the date on the folder.

I started trying to figure out a way of creating a file count variable, such as;
Code:
'dirnum=ls | wc -l'   #and then to go on and write an 'if/then' script like 
 
'if $dirnum > 5   then....'

Again, I'm stuck with trying to figure out how to delete by date.

Sorry if this post is too wordy or if I've left out info. This marks my first post in a forum as I can usually figure these things out.

If anyone has any ideas or some better direction, it would be much appreciated.

thanks.

Last edited by vbe; 06-14-2010 at 12:21 PM.. Reason: code tags please
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script to delete folder based on text file information

I have been working on a script to list all the name's of a subfolder in a text file then edit that text file and then delete the subfolder base on the edited text file so far I have been able to do every thing I just talked about but can't figure out how to delete the subfolers base on a text file... (8 Replies)
Discussion started by: bone11409
8 Replies

2. Shell Programming and Scripting

Shell script delete log files from folder & subfolders on space usage

Hi, I am trying to write a shell script to delete logs generate by db when space in the folder reaches 70%. i am getting space values from db, find the files at OS and remove them by using a cron job runs every 5minutes. I have to keep the latest 5 files at any time, my problem is that log files... (3 Replies)
Discussion started by: saha
3 Replies

3. Shell Programming and Scripting

delete all the files in folder a which exist in folder b

Hi , I need a script which basically deltes all files in folder a which are alreasy present in folder b say folder a has files abc.txt pqr .txt and b has abc.txt pqr.txt rmr.txt then file abc.txt and pqr.txt from a should be deleted (6 Replies)
Discussion started by: viv1
6 Replies

4. UNIX for Dummies Questions & Answers

Shell script folder creation

hi can any one help me in shell scripting where in my requirement is to write a shell script where in if i run that script i should copy all the .doc files from one system to another systems within a network like from parent folders to child folder example parent folder A within parent folder... (5 Replies)
Discussion started by: afra
5 Replies

5. UNIX for Dummies Questions & Answers

Script to delete files in different folder

Hi Experts, i need a little help. i have different folder that contain files that need to be deleted. but those folder contains huge amoung of same with 3 different extention. what i used to do is to delete them using the rm commande rm *.ext *.ext1 *.ext3 what i want to do is to have... (1 Reply)
Discussion started by: yprudent
1 Replies

6. Shell Programming and Scripting

Script to delete files in a folder older than 2 days

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)
Discussion started by: hemanthsaikumar
2 Replies

7. Shell Programming and Scripting

Ignore Folder in Shell Script ?

Hi, I currently use a script to extract *.deb files located in a Directory called "/var/mobile/Media/Downloads" The Problem is howver I want the script to ignore the folder: "/var/mobile/Media/Downloads/New Debs and Files" (it shall NOT decompile any of the files in that folder. Here is... (2 Replies)
Discussion started by: pasc
2 Replies

8. Shell Programming and Scripting

Shell script to copy files from on folder to another

I am trying to copy files with specific date and name to another folder. I am very new to shell scripting so i am finding it hard to do that. see the sample code i have written below. srcdir="/media/ubuntu/CA52057F5205720D/Users/st4r8_000/Desktop/office work/26 nov"... (13 Replies)
Discussion started by: Aqeel Abbas
13 Replies

9. Shell Programming and Scripting

Request for Shell script to move files from Subfolder to Parent folder and delete sub folder

Hi Team, I am new to shell script and there is a requirement where files should be moved from Subfolder to parent folder. Eg: parent folder --> /Interface/data/test/IN Sub folder -->/Interface/data/test/IN/Invoice20180607233338 Subfolder will be always with timestamp... (6 Replies)
Discussion started by: srivarun15
6 Replies

10. Shell Programming and Scripting

Delete oldest folder based on folder named as date

Hi, I have a script doing backup to synology server, the script create new folder each day with the date as being folder name i.e. 2018-07-30. Just before creating the new folder I want the script to find the oldest folder from the list and delete it including its content. for example... (3 Replies)
Discussion started by: humble_learner
3 Replies
TMPREAPER(8)						      System Manager's Manual						      TMPREAPER(8)

NAME
tmpreaper - removes files which haven't been accessed for a period of time SYNOPSIS
tmpreaper [-htvfmMsaT] [--help] [--test] [--verbose] [--force] [--delay=x] [--runtime=x] [--showdeleted] [--ctime] [--mtime] [--mtime-dir] [--symlinks] [--all] [[--protect '<shell_pattern>']...] <time_spec> <dirs>... DESCRIPTION
tmpreaper recursively searches for and removes files and empty directories which haven't been accessed for a given number of seconds. Nor- mally, it's used to clean up directories which are used for temporary holding space, such as "/tmp". Please read the WARNINGS section of this manual. When changing directories, tmpreaper is very sensitive to possible race condition security exploits[1], and will exit with an error if one is detected. It does not follow symbolic links in the directories it's cleaning (even if a symbolic link is given as its argument), never performs chdir(".."), will not switch file systems, and only removes empty directories and regular files. Unless your machine is one with lots of relatively untrusted users, such as an ISP or school, you don't need this program; `find ... -exec rm ...' works just as well when you don't have to be concerned about people trying to exploit the race condition on you. tmpreaper will stop itself after almost one minute with an appropriate warning message, as attempts to keep it running long enough so that it runs in parallel with another instance of itself may also lead to possible vulnerabilities. Normally, tmpreaper won't need that amount of time. If your system is so slow that it does, try to configure things so that this doesn't happen. As a last resort, the --runtime=x option can be used to set the number of seconds after which the timeout occurs; the default setting is 55 seconds. tmpreaper dates files by their atime, not their mtime, unless you select the --mtime option. If files aren't being removed when ls -l implies they should be, use stat(1) or ls --time=access to examine the file's atime and see if that helps to explain the problem. Additionally, tmpreaper can be instructed to also check the ctime (inode change time, which is updated e.g. when the file is created or permissions are changed). This is primarily useful when tmpreaper is used to clean up directories that are accessible as a Samba share; DOS (and Windows) PCs preserve the mtime and the atime when copying to a new file, so that it appears that the newly created file is old. tmpreaper will remove such files is the atime is beyond the removal time, even though they were just created. This is avoided by using the --ctime option. As testing the contents of subdirectories will update those directories' atime, empty directories won't be removed. To circumvent this problem you can use the --mtime-dir option, which will switch on mtime checking for directories only. Using --mtime-dir in addition to --mtime doesn't do anything useful. The <time_spec> parameter defines the age threshold for removing files. If the file has not been accessed for <time_spec>, it becomes eli- gible for removal. The <time_spec> should be a number, defaulting to hours, optionally suffixed by one character: `d' for days, `h' for hours, `m' for minutes, or `s' for seconds. Following the time option, one or more directories must be given for tmpreaper to clean up. On linux ext2/ext3 filesystems, no errors will be given when trying to remove files marked as immutable. A common situation for this (nowa- days) is the ext3 .journal file. However, there may of course be other files marked as such by the system administrator. OPTIONS
<noargs>, -h, --help Print a brief version, copyright, and usage statement on stderr, then exit with error status 1. -t, --test Don't actually remove any files, but go through the motions, checking through the directory, then pretend to remove the eligible files. -v, --verbose Print a verbose display. Two levels of verbosity are available---use this option twice to get the most verbose output. The --test option automaticly sets --verbose once. Higher numbers mean more output (max. is 3). To force normal verbosity after --test, use "--verbose=0". This will generally only show error messages. Use "--test --verbose=0 --showdeleted" to give a shellscript-like list of actions that would have been done (see the --showdeleted description below). --showdeleted Show what files and directories are deleted. The output is in the form of shell commands, i.e. "rm /dir/dir2/file" and "rmdir /dir/dir2". When used together with --test, this option will still cause the "shell commands" to be printed, although nothing is really done. Note that this may show more than without --test, as problems removing the file won't be detected (e.g. immutable files). -f, --force Remove files even if EUID doesn't have write access (akin to rm -f). Normally, files owned by the current EUID, with no write bit set are not removed. --delay=x Delay execution at the start for a random time, up to x seconds; if no value is specified, the default maximum time to delay is 256 seconds. This is an option useful in cron scripts to make the execution of tmpreaper less predictable, thus making things a little harder for those who would attempt to use tmpreaper to thwart security. -T x, --runtime=x Execution of tmpreaper will aborted after x seconds; this is to prevent attacks that create many, many files. By default the time- out is set to 55 seconds. A value of 0 will disable this feature, which is not advised as this feature prevents possible race-con- ditions between different instances of tmpreaper. -m, --mtime Base the decision of whether to remove the file on its mtime, rather than on its atime. -M, --mtime-dir Base the decision of whether to remove the directory on its mtime, rather than on its atime. -c, --ctime Base the decision of whether to remove the file on its ctime, in addition to its atime. Only applicable if the --mtime options is not given! -s, --symlinks Remove symlinks too, not just regular files and directories. -a, --all Remove all file types, not just regular files, symlinks, and directories. --protect '<shell_pattern>' Protect the files that match the <shell_pattern> from deletion. This option may be used more than once. It has no one letter abbreviation, you must spell out the full word "protect". If you do not enclose the <shell_pattern> in single quotes, the shell will perform the expansion before tmpreaper reads its argument array. The program does not support that syntax, so you must use single quotes around the glob pattern. tmpreaper will chdir(2) into each of the directories you've specified for cleanup, and check for files matching the <shell_pattern> there. It then builds a list of them, and uses that to protect them from removal. For example: tmpreaper --test --verbose --protect '.X*-{lock,unix,unix/*}' --protect '.ICE-{unix{/*,}}' 5d /tmp # 5 day grace period TIPS
As long as there are files present inside a subdirectory, it won't get removed. You can use a non-writable, self-owned file, perhaps named ".tmpreaper", or, if you are su, a file that has the ext2fs immutable attribute set, to keep a subdirectory from being deleted. Of course, you could just as easily use use the --protect option to obtain the same result. Because the command line argument processing is implemented with GNU getopt_long(3)[2], you may order the arguments thusly, if it pleases you: tmpreaper --test --verbose 5h --protect './tmp/{blah?,dir{/blah4,}}' ./tmp --protect '/tmp/.X*' /tmp ... Note that if you use --all or --symlinks, it will have global effect. If you only want it turned on for one directory, you must use separate commands. WARNINGS
Please do not ever run tmpreaper on `/'!!! There are no safeguards against this built into the program, because that would make it diffi- cult to use in a chrooted environment. SEE ALSO
chattr(1) chdir(2) chroot(8) cron(1) getopt_long(3) ls(1) lsattr(1) rm(1) stat(1) [1] http://seclists.org/lists/bugtraq/1996/May/0046.html or http://www.security-express.com/archives/bugtraq/1996_2/0054.html http://linuxgazette.net/18/tmp.html (formerly http://www.linuxgazette.com/issue18/tmp.html) http://linuxgazette.net/20/followup.html [2] info:(libc)Long Options AUTHOR
Karl M. Hegbloom <karlheg@debian.org> Mostly based on `tmpwatch-1.2/1.4', by: Erik Troan <ewt@redhat.com> Now being maintained for Debian by: Paul Slootman <paul@debian.org> 4th Berkeley Distribution Mon May 19 2008 TMPREAPER(8)
All times are GMT -4. The time now is 09:48 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy