How do I delete all files smaller than a certain size in all subfolders?
I have a folder with many sub-folders containing small tif files (less than 160kb) which have been merged together in bigger pdf files, together with some big multi-page tif files.
I want to delete all small tif files without deleting the bigger files (tif or pdf) and retaining the directory structure. How do I go about it on Linux using the command-line?
Solution 1:
find . -name "*.tif" -type 'f' -size -160k -delete
Run the command without -delete
first to verify that the correct files are found.
Note the -
before 160k
. Just 160k
means exactly 160 kilobytes. -160k
means smaller than 160 kilobytes. +160k
means larger than 160 kilobytes.
The -type 'f'
forces the command to only act on files and skip directories. this would avoid errors if the path contains folders with names that match the pattern *.tif
.
If you want to filter size in bytes (as in 160 bytes instead of 160 kilobytes) then you have to write it like this: 160c
. If you just write 160
it will be interpreted as 160*512 bytes. This is a strange requirement by POSIX. Read here for more details: https://unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unit-512-bytes