Remove all the subdirectories except latest 5 inside any given directory


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Remove all the subdirectories except latest 5 inside any given directory
# 15  
Old 01-29-2015
Quote:
Originally Posted by Devendra Hupri
Hello Mr.Cragun,

When I tried
Code:
rm -rf `ls -t $TGTDIR | awk 'NR>5'`

from any other directory, It was unable to delete, exited normally, without yielding any ,messages with 0 status.

But when I executed the same command after doing a cd to TGTDIR, It worked.
OK. So the ls -t $TGTDIR gives you filenames in $TGTDIR, not absolute pathnames. So you either removed files (of any type; not necessarily directories) in the directory where you ran this script (instead of from $TGTDIR), or it didn't find files in the current directory with the names of the files you were trying to remove (but the rm -f option precluded writing diagnostic messages for nonexistent files).

I'm surprised that the 1st code suggestion MadeInGermany gave you worked (unless you were already located in $TGTDIR). The cd command it used was in a command substitution (which runs in a subshell environment, which should not affect the working directory of the rm command). However, the following slight modification of that command:
Code:
cd $TGTDIR && rm -rf `ls -t | awk 'NR>5'` && cd -

will probably do what you wanted. The 2nd code suggestion he made should work because the directories to be removed would be given to the rm command as absolute pathnames.
These 2 Users Gave Thanks to Don Cragun For This Post:
# 16  
Old 01-29-2015
Thanks for the fix, Don. I had typed that in a hurry.
I guess it was the second suggestion that worked.
Another suggestion, do the cd in a sub shell so it does not harm the main shell:
Code:
(cd $TGTDIR && rm -rf `ls -t | awk 'NR>5'`)

And the following can handle file names with spaces:
Code:
(cd $TGTDIR && ls -t | awk 'NR>5' | xargs -l rm -rf)

These 2 Users Gave Thanks to MadeInGermany For This Post:
# 17  
Old 01-29-2015
Yes Don, The second suggestion given by MadeInGermany worked for me.

Thank you for sharing the solution.
# 18  
Old 01-29-2015
Quote:
Originally Posted by Devendra Hupri
Yes Don, The second suggestion given by MadeInGermany worked for me.
Thank you for sharing the solution.
Hello Devendra,

Code given in POST#5 is working fine for me, not sure(surprised) why it is not working for you.
Let me know if you got any error after executing it. The only difference between 1st command and 2nd command given in
POST#5 is | sh will perform the deletion and 1st command will only print the directories to be deleted
as follows.
Code:
#### To print the directories to be deleted:
ls -ltr $TGTDIR | awk '/^d/ {A++;X[++j]=$NF} END{for(i=1;i<=A-5;i++){print "rm -rf " X[i]}}'
 
##### To delete the directories:
ls -ltr $TGTDIR | awk '/^d/ {A++;X[++j]=$NF} END{for(i=1;i<=A-5;i++){print "rm -rf " X[i]}}' | sh


Thanks,
R. Singh

Last edited by RavinderSingh13; 01-29-2015 at 06:14 AM.. Reason: Added comments
This User Gave Thanks to RavinderSingh13 For This Post:
# 19  
Old 01-29-2015
Quote:
Originally Posted by RavinderSingh13
Hello Devendra,

Code given in POST#5 is working fine for me, not sure(surprised) why it is not working for you.

Thanks,
R. Singh

Hey, Ravinder,

Your code given in #5 is working when i run it from the same directory where the subdirs are present but It won't work from any other dirs outside.

Thank you.
# 20  
Old 01-29-2015
Hello Devendra,

I have figured it out(sorry for confusion), we need to give complete path while deleting the directories while passing it from awk to sh as follows.
Code:
####To delete the directories.
ls -ltr $VAR | awk -vvar=`echo $VAR/` '/^d/ {A++;X[++j]=$NF} END{for(i=1;i<=A-5;i++){print "rm -rf " var X[i]}}' | sh

Hope this helps.

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 21  
Old 01-29-2015
Hey Ravinder,

This Code worked..

Thank you :-)
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Getting all the subdirectories inside directories in excel file

Can anyone help me with a short command or script for the below scenario there is a path, /a/b/c/home?? Inside the above path there are number of subdirectories such as one two three four i need to take all the subdirectories inside home?? with full path. i need only one level of... (4 Replies)
Discussion started by: Little
4 Replies

2. Shell Programming and Scripting

Append string to all the files inside a directory excluding subdirectories and .zip files

Hii, Could someone help me to append string to the starting of all the filenames inside a directory but it should exclude .zip files and subdirectories. Eg. file1: test1.log file2: test2.log file3 test.zip After running the script file1: string_test1.log file2: string_test2.log file3:... (4 Replies)
Discussion started by: Ravi Kishore
4 Replies

3. Shell Programming and Scripting

List files with *.i extension in a directory and all its subdirectories + 30days old then remove

I need to write a script to : list files with *.i extension in a directory and all its subdirectories + 30days old, save it in a file and then remove (2 Replies)
Discussion started by: lena keung
2 Replies

4. Shell Programming and Scripting

Compressing all directories inside a directory and remove the uncompressed version

hi pls give me a script to compress all directories inside a directory and remove the original uncompressed version... >> please also tell the single commmand to uncompress all the directories back...whemn needed (2 Replies)
Discussion started by: dll_fpga
2 Replies

5. Shell Programming and Scripting

remove a whole directory tree WITH files inside?

Assume I want to remove a whole directory tree beginning with /foo/bar/ The directory or sub-directories may contain files. The top directory /foo/bar/ itself should not be deleted. rm -f- r /foo/bar does not work because it requires a directory tree without files. How does it work... (3 Replies)
Discussion started by: pstein
3 Replies

6. Shell Programming and Scripting

I'm trying to remove all mp3's in subdirectories

My company has a policy that employees can't keep music on our servers so im looking for a line or script that I can run as part of a cron job that will remove all mp3's in the users home directories. Does anyone have any idea how I might accomplish this? (3 Replies)
Discussion started by: binary-ninja
3 Replies

7. Shell Programming and Scripting

Copying subdirectories of a directory to some other directory and renaming them

Hi, I am a newbie in shell scripting. I have to copy a particular sub-directory (data) from a large no. of directories (all in the same folder) and paste them to another directory ( /home/hubble/data ) and then rename all the subdirectories (data) as the name of its parent directory. please... (8 Replies)
Discussion started by: sholay
8 Replies

8. Shell Programming and Scripting

Move the latest or older File from one directory to another Directory

I Need help for one requirement, I want to move the latest/Older file in the folder to another file. File have the datetimestamp in postfix. Example: Source Directory : \a destination Directory : \a\b File1 : xy_MMDDYYYYHHMM.txt (xy_032120101456.txt) File2: xy_MMDDYYYYHHMM.txt... (1 Reply)
Discussion started by: pp_ayyanar
1 Replies

9. Shell Programming and Scripting

How to find files only inside the subdirectories only?

Hi I have a directory with two subdirectories and also have a code like below to search files modified in last 2 minutes. # ls hello080909.txt inbox outbox # find . -type f -mmin +2 ./inbox/hello2080909.txt ./outbox/hi0080909.txt ./hello080909.txt The above code just searches and... (3 Replies)
Discussion started by: Tuxidow
3 Replies

10. UNIX for Dummies Questions & Answers

How to remove directory with subdirectories and files?

I'm trying to remove several directories which contains sun-dirs and files inside. I used the command rm -r <dirname> But, it always ask "examine file in directory <dirname> yes/no?" line by line. So, i need to write "y" for every line. How can i skip this step and remove all directories with... (9 Replies)
Discussion started by: ppa108
9 Replies
Login or Register to Ask a Question