List old, new directories
Examples
Remove old directories which are stored more than 20 days
Using find tool
cd /opt/mydir
FILE_SERVER=/opt/my_file_server
# Need at least 17GB x 2
NEED_FREE=$((17224314*2))
FREE_SPACE=$(df -k --output=avail $FILE_SERVER | tail -1 | awk '{print $1}')
echo "INFO: Check if free space can not store more than 2 x 17GB"
if (( $FREE_SPACE < $NEED_FREE )); then
echo "INFO: Free sapce is not enough"
# CHANGE HERE
echo "INFO: Finding old directories which are stored more than 20 days"
for some_dir in $( find $FILE_SERVER -maxdepth 1 -type d -name 'DIR_NAME*' -mtime +20 | sort ); do
echo "Removing $some_dir"
rm -rf $some_dir
done
# CHANGE END
else
echo "INFO: Free sapce is enough"
fi
Using ls tool
But beware: parsing ls command can be dangerous when the filenames contain funny characters like newlines or spaces.
Read more: http://mywiki.wooledge.org/ParsingLs
Remove 3 oldest directories
for some_dir in $( ls $FILE_SERVER -td | tail -n 3 ); do
# for some_dir in $( find $FILE_SERVER -maxdepth 1 -type d | sort | head -3 ); do
echo "Removing $some_dir"
rm -rf $some_dir
done
Remove 3 newest directories
for some_dir not in $( ls $FILE_SERVER -td | head -3 ); do
# for some_dir not in $( find $FILE_SERVER -maxdepth 1 -type d | sort -r | head -3 ); do
echo "Removing $some_dir"
rm -rf $some_dir
done
Keep 3 newest directories, remove all the rest
Note: it's +4, instead of 3
ls -t | tail -n +4 | xargs rm --
or
Note: it's +5, instead of 3. We have to add 2 into number of directories to be kept.
find . -maxdepth 1 -type d -printf '%T@t%p' | sort -z -nrk1 | tail -z -n +5 | cut -z -f2- | xargs -0 rm -f --
REF: https://stackoverflow.com/questions/26765163/delete-all-files-except-the-newest-3-in-bash-script
Loading