Files by size


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Files by size
# 1  
Old 07-02-2018
Computer Files by size

I am new to Unix and need help. I have several files of different sizes Example: 1 GB , 2GB , 500 mb ,200mb and even small sizes. What I want is I want to pick files and sum of the combined file size should be less than 3 Gb and move them to a different directory. when I do ls -ltr I want to pcik files of size 3 GB (files sizes combined it could be 2 files or 3 files or 30 files but should be less than 3 GB ). every time the script should pick up files less than 3 GB . For any reason there are only 5 files and the total size is less than 3 Gb then all those files should be picked and moved as well. We are in AIX unix Please let me know if you need more information. Thank you in advance for your help.

Last edited by pyarigreat; 07-02-2018 at 06:01 PM.. Reason: unix aix added
# 2  
Old 07-02-2018
By specifying ls -ltr, I assume that you are trying to move the oldest file each time you invoke this script. Is the intent to move only the oldest files in that directory and quit selecting files when the next oldest file would create a combined size >= 3 GB? Or is the intent to move the oldest file and select more files until you get as close as possible to 3GB even if some of the selected files are not the oldest files in the directory?

By 3 GB do you mean 3 * 1000 * 1000 * 1000, or do you mean 3 * 1024 * 1024 * 1024?
# 3  
Old 07-03-2018
Yes the intent is to move the oldest file and select more files until you get as close as possible to 3GB even if some of the selected files are not the oldest files in the directory and just think there are 20 files and total combined size is 2 GB then we want all the files to be moved as well.

By 3 GB I mean 3 * 1000 * 1000 * 1000 . Thank you for your help Don Appreciate it.
# 4  
Old 07-03-2018
One could try something like:
Code:
#!/bin/ksh
destination=/destination/directory
left=3000000000
source=/source/directory

if ! cd "$source"
then	exit 1
fi
ls -ltr | grep '^-' | while read _ _ _ _ size _ _ _ name
do	if [ $size -lt $left ]
	then	left=$((left - size))
		printf 'Moving "%s", size: %d, looking for %d more.\n' \
		    "$name" $size $left
		echo mv "$name" "$destination"
	else	printf 'File "%s", size: %d, too big to move this time.\n' \
		    "$name" $size
	fi
done

If you change the values assigned to destination and source to pathnames to the destination and source directories you want to use and run the code as it is above, it will tell you which files it would select from the directory named by source to be moved to the directory named by destination, show you the sizes of the files being moved, and show you the mv commands that would be issued to move those files (without actually moving anything). If you try that and it looks like it is doing what you want, you can remove all of the code shown in red and the script will just silently move the oldest files it can find as long as the total size of the moved files is less than 3000000000 bytes.
This User Gave Thanks to Don Cragun For This Post:
# 5  
Old 07-03-2018
Thank you Don for your Quick reply , it works as expected . I appreciate it so much.
# 6  
Old 07-05-2018
This script (we call ours lz) has an optional "-r" first parameter for descending sizes and/or the star name(s) you would put after an ls command.
Code:
rev=""
if [ $# -gt 0 ]
  then
  if [ $1 = '-r' ]
  then
    rev="r"
    shift
  fi
fi
ls -l $* |grep -v "total " |sort +4n$rev -5 +8 |more -e

Same sized files are listed alphabetically.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Files by size

I am new to Unix and need help. I have several files of different sizes Example: 1 GB , 2GB , 500 mb ,200mb and even small sizes. What I want is I want to pick files and sum of the combined file size should be less than 3 Gb and move them to a different directory. when I do ls -ltr I want to pcik... (1 Reply)
Discussion started by: pyarigreat
1 Replies

2. Shell Programming and Scripting

Files have same size

Hello, I want remove files have same size in a directory. this command only find this files. ls -l | awk '$1!~/^d/{if(size!=""){ print}size=$8}' I want to remove the files of the same size. samples: 5 files are same size. I want to keep only first file. Thank you very much for your help. (3 Replies)
Discussion started by: hoo
3 Replies

3. Shell Programming and Scripting

How to delete some of the files in the directory, if the directory size limits the specified size

To find the whole size of a particular directory i use "du -sk /dirname".. but after finding the direcory's size how do i make conditions like if the size of the dir is more than 1 GB i hav to delete some of the files inside the dir (0 Replies)
Discussion started by: shaal89
0 Replies

4. UNIX for Dummies Questions & Answers

How to list files which have same size?

Hi guys, I need to do 100 files comparison after I sorted the files. There are no specific key for sorting so i plan to arrange the files based on the file size. The command that i used to sort the files by size is as per below:- ls -l | sort +4rn | awk '{print $5, $9}' The problem that i... (3 Replies)
Discussion started by: shahril
3 Replies

5. UNIX for Dummies Questions & Answers

copy only new files or files of a different size

hello i would like to copy files from 1 location to a nother, but it has only to copy files which are newer or have a different filesize. all has to be logged to a copy.log file (als skipped files should be in the log) is this possible with the cp command (1 Reply)
Discussion started by: arnoldg
1 Replies

6. Shell Programming and Scripting

Merge files of differrent size with one field common in both files using awk

hi, i am facing a problem in merging two files using awk, the problem is as stated below, file1: A|B|C|D|E|F|G|H|I|1 M|N|O|P|Q|R|S|T|U|2 AA|BB|CC|DD|EE|FF|GG|HH|II|1 .... .... .... file2 : 1|Mn|op|qr (2 Replies)
Discussion started by: shashi1982
2 Replies

7. Shell Programming and Scripting

This script cut size of files "Lol" change string in files

Basic: find . -type f -name “*.txt” -print | awk '{gsub("Ontem", "AntesdeOntem", $0); print > FILENAME}' *.txt The idea is in folder /home/myapontamentos I have some files and i need to change in all them the word "ontem" to "antesdeontem". But bigger files are cut (size i mean)... (4 Replies)
Discussion started by: single
4 Replies

8. Shell Programming and Scripting

size of files

hello Experts,can any one tell me that i have a folder data in linux. and there are three files A,B,C in the directory. cany any one tell me the command that which can tell me how much space is occupied by each file and its free space also for example FILES USED SPACE FREE SPACE A ... (1 Reply)
Discussion started by: shary
1 Replies

9. Shell Programming and Scripting

bash script working for small size files but not for big size files.

Hi, I have one file stat. Stat file contents are as follows: for example. H50768020040913,00260100,507680,13,0000000643,0000000643,00000,0000 H50769520040808,00260100,507695,13,0000000000,0000000000,00000,0000 H50770620040611,00260100,507706,13,0000000000,0000000000,00000,0000 Now i... (1 Reply)
Discussion started by: davidpreml
1 Replies

10. UNIX for Dummies Questions & Answers

sort files by size

Is there a way to sort files by size using the ls command? thanks in advance (1 Reply)
Discussion started by: AMD
1 Replies
Login or Register to Ask a Question