How do I move files based on size Unix?

Move all files smaller than 500kilobytes to destination

find . -type f -size -100k -exec mv '{}' ../ \;
 

Move all files larger than 500kilobytes to destination

find . -type f -size +500k -exec mv '{}' data/ \;
 

 

From my manpage (on a MacOS 10.11 machine)

 -size n[ckMGTP]
         True if the file's size, rounded up, in 512-byte blocks is n.  If
         n is followed by a c, then the primary is true if the file's size
         is n bytes (characters).  Similarly if n is followed by a scale
         indicator then the file's size is compared to n scaled as:

         k       kilobytes (1024 bytes)
         M       megabytes (1024 kilobytes)
         G       gigabytes (1024 megabytes)
         T       terabytes (1024 gigabytes)
         P       petabytes (1024 terabytes)

(suffixes other than c being non-standard extensions).

So, since you didn't specify a suffix, your -size 128 meant 128 blocks, or 64Kbytes that is only matched for files whose size was comprised in between 127*512+1 (65025) and 128*512 (65536) bytes.

You should use -size 128c if you want files of exactly 128 bytes, -size -128c for files of size strictly less than 128 bytes (0 to 127), and -size +128c for files of size strictly greater than 128 bytes (129 bytes and above).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章