Sponsored Content
Full Discussion: Removing older version files
Top Forums Shell Programming and Scripting Removing older version files Post 302766767 by alister on Tuesday 5th of February 2013 10:57:32 AM
Old 02-05-2013
Quote:
Originally Posted by balajesuri
Code:
#! /bin/bash

n=$1
x=`ls -l | wc -l`
for y in $(ls -1t | tail -$(( $x - $n ))); do rm -rf $y; done

Since ls is run twice, there's a race condition. If a directory is deleted in the meantime, a directory that should have been kept will be nuked. Similarly, if a directory is added in the meantime, a directory that should have been removed will persist.

There is no need to run ls twice. You can just use tail's ability to index releative to the beginning of the data, tail -n +10 versus tail -n 10. However, this approach still requires some arithmetic, since skipping the first x lines requires an option argument of x+1.

I wouldn't bother with tail. In my opinion, the simplest solution is to use sed:
Code:
ls -t | sed 1,10d | xargs rm -rf

Note that xargs does not play well with filenames containing whitespace or quotes. If such filenames occur, instead of xargs, a less efficient while-read loop would be necessary.
Code:
ls -t | sed 1,10d | while IFS= read -r dirname; do rm -fr "$dirname"; done

Regards,
Alister

Or, eve
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

removing files after 6 hours or older

What is the command to remove files that are generated 6 hours or older? The find and remove tells only how to remove if the file is one day old or more. Appreciate quick reply. Thanks (3 Replies)
Discussion started by: gthokala
3 Replies

2. UNIX for Advanced & Expert Users

Need older version of System Firmware for 7026-H80

Hi all, I have an H80 that I'm migrating to 5.3 and prior to doing so it needed the firmware upgraded. I don't have copies of the old firmware that was on it since I was not the one who installed it and there were no copies to be found on the server itself. I installed the latest version and... (4 Replies)
Discussion started by: howardle
4 Replies

3. UNIX for Dummies Questions & Answers

Removing files older than 7 days

Script help, I need to delete files that are older than 7 days. I do that automatically but I know that a cron job can do the job for me. Any help is greatly appreciated, as you can see, I am a DOS or WINDOWS guy. Little on UNIX. Thanks (3 Replies)
Discussion started by: texasoeb
3 Replies

4. UNIX for Dummies Questions & Answers

.profile has been replaced and need to get the older version

Hi All, .profile has been replaced with a new one. I need to know the variables used in the older version of .profile. I have a session opened using the old .profile. Is there a way that I can get the exact file. I had some luck by using set command. But is there any way that I can get the... (5 Replies)
Discussion started by: shash
5 Replies

5. Shell Programming and Scripting

Removing files older than one week in a directory

Hi, I need a shell script to remove the files older than a week in a directoy and if necessary to zip the files. (2 Replies)
Discussion started by: sudhakaryadav
2 Replies

6. UNIX for Advanced & Expert Users

removing files older than n days

Hi, on AIX 6.1, is there any commande line to remove the files older than n days in a directory ? Thanks. (2 Replies)
Discussion started by: big123456
2 Replies

7. Shell Programming and Scripting

For loop in older version of ksh

When I am trying to use below code of for loop on older version of ksh it not working,and I just want to use only FOR loop ----------------- for i in (1..5) do echo $i done ----------------- please suggest.it really stoping me. FYI: i want to do this only by for loop (2 Replies)
Discussion started by: RahulJoshi
2 Replies

8. Ubuntu

Installation of older version of rsyslog

Hi, I am trying to downgrade the version of rsyslog to the older version (i.e) and when i issue the below command to check the packages i dont see the required package (i.e) and when i try to install it is complaining about package not found. Please advise on how to install the... (1 Reply)
Discussion started by: prash358
1 Replies

9. Debian

Which older version and variant ISO image should I use?

Which older version and variant of Debian Linux ISO image should I use? I attempted to install two versions of Debian Linux Operating System onto my older full tower computer. First version, V8.5.0, Amd64, xfce, 32Bit. Second version V7.11.0, i386, 32Bit. When trying to install... (1 Reply)
Discussion started by: Jefferyab6
1 Replies

10. UNIX for Beginners Questions & Answers

How to install older package version on Ubuntu 18.04?

Hello, I'm running Ubuntu 18.04 and I would like to install libboost-python version 1.46. Currently I have installed version 1.65: wakatana@local-machine:~$ dpkg -l | grep libboost-python ii libboost-python-dev 1.65.1.0ubuntu1 amd64 ... (1 Reply)
Discussion started by: wakatana
1 Replies
TAIL(1) 						    BSD General Commands Manual 						   TAIL(1)

NAME
tail -- display the last part of a file SYNOPSIS
tail [-F | -f | -r] [-q] [-b number | -c number | -n number] [file ...] DESCRIPTION
The tail utility displays the contents of file or, by default, its standard input, to the standard output. The display begins at a byte, line or 512-byte block location in the input. Numbers having a leading plus ('+') sign are relative to the beginning of the input, for example, ``-c +2'' starts the display at the second byte of the input. Numbers having a leading minus ('-') sign or no explicit sign are relative to the end of the input, for example, ``-n 2'' displays the last two lines of the input. The default start- ing location is ``-n 10'', or the last 10 lines of the input. The options are as follows: -b number The location is number 512-byte blocks. -c number The location is number bytes. -f The -f option causes tail to not stop when end of file is reached, but rather to wait for additional data to be appended to the input. The -f option is ignored if the standard input is a pipe, but not if it is a FIFO. -F The -F option implies the -f option, but tail will also check to see if the file being followed has been renamed or rotated. The file is closed and reopened when tail detects that the filename being read from has a new inode number. If the file being followed does not (yet) exist or if it is removed, tail will keep looking and will display the file from the begin- ning if and when it is created. The -F option is the same as the -f option if reading from standard input rather than a file. -n number The location is number lines. -q Suppresses printing of headers when multiple files are being examined. -r The -r option causes the input to be displayed in reverse order, by line. Additionally, this option changes the meaning of the -b, -c and -n options. When the -r option is specified, these options specify the number of bytes, lines or 512-byte blocks to display, instead of the bytes, lines or blocks from the beginning or end of the input from which to begin the display. The default for the -r option is to display all of the input. If more than a single file is specified, each file is preceded by a header consisting of the string ``==> XXX <=='' where XXX is the name of the file unless -q flag is specified. EXIT STATUS
The tail utility exits 0 on success, and >0 if an error occurs. EXAMPLES
To display the last 500 lines of the file foo: $ tail -n 500 foo Keep /var/log/messages open, displaying to the standard output anything appended to the file: $ tail -f /var/log/messages SEE ALSO
cat(1), head(1), sed(1) STANDARDS
The tail utility is expected to be a superset of the IEEE Std 1003.2-1992 (``POSIX.2'') specification. In particular, the -F, -b and -r options are extensions to that standard. The historic command line syntax of tail is supported by this implementation. The only difference between this implementation and historic versions of tail, once the command line syntax translation has been done, is that the -b, -c and -n options modify the -r option, i.e., ``-r -c 4'' displays the last 4 characters of the last line of the input, while the historic tail (using the historic syntax ``-4cr'') would ignore the -c option and display the last 4 lines of the input. HISTORY
A tail command appeared in PWB UNIX. BSD
March 16, 2013 BSD
All times are GMT -4. The time now is 08:37 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy