Tuesday, June 22, 2021

 


Remove files which is older than X days in shell script


ls -t | sed -e '1,10d' | xargs -d '\n' rm

This should handle all characters (except newlines) in a file name.


What's going on here?


ls -t lists all files in the current directory in decreasing order of modification time. Ie, the most recently modified files are first, one file name per line.

sed -e '1,10d' deletes the first 10 lines, ie, the 10 newest files. I use this instead of tail because I can never remember whether I need tail -n +10 or tail -n +11.

xargs -d '\n' rm collects each input line (without the terminating newline) and passes each line as an argument to rm.

As with anything of this sort, please experiment in a safe place.




ls -d -1tr ./backups/* | head -n -5 | xargs -d '\n' rm -f



No comments:

Post a Comment