45

I want to find files which are greater than 1 GB and older than 6 months in entire server. How to write a command for this?

chaos
  • 47,463
  • 11
  • 118
  • 144
shinek
  • 587
  • 1
  • 4
  • 6

2 Answers2

68

Use find:

find /path -mtime +180 -size +1G

-mtime means search for modification times that are greater than 180 days (+180). And the -size parameter searches for files greater than 1GB.

chaos
  • 47,463
  • 11
  • 118
  • 144
  • 2
    Note that in the `find` implementations where that `G` suffix is supported, it means GiB (1073741824 bytes), not GB (1000000000). Portably, you'd use `find /path -mtime +180 -size +1073741824c` – Stéphane Chazelas May 13 '15 at 12:11
  • 1
    if you want to avoid seeing errors between the list of files like these: `find: a.txt :Permission denied` I suggest adding this `2>/dev/null` inspired from this comment: https://unix.stackexchange.com/questions/42841/how-to-skip-permission-denied-errors-when-running-find-in-linux#comment58845_42842 – gmansour Feb 10 '18 at 03:24
  • 1
    You can also pipe the results into `xargs ls -lhS` to sort them by size: `find /path -mtime +180 -size +1G | xargs ls -lhS` – user553965 Jan 29 '19 at 19:46
  • 1
    @user553965 Your command won't work. What is actually needed to sort by size is: `find / -size +1G -mtime +180 -print0 2>/dev/null | xargs -0 ls -lhS`. Newbies note: The redirection of `2>/dev/null` just gets rid of the `permission denied` errors which will inevitably appear when searching from root. To sort by last modified date use `ls -lht` instead and adding `r` to the `ls` commands, e.g. `ls -lhSr`, will reverse the results (smallest to largest / oldest to newest). – mattst Oct 25 '19 at 15:21
  • How do you also make it print out the human-readable size of each thing found? – Gabriel Staples Aug 26 '21 at 03:01
  • @GabrielStaples: Good question, you should [ask](https://unix.stackexchange.com/questions/ask) it. – chaos Aug 26 '21 at 09:04
  • @chaos, here is my question: [Find files greater than x kB/MB/GB in size, and also show their size](https://unix.stackexchange.com/questions/666685/find-files-greater-than-x-kb-mb-gb-in-size-and-also-show-their-size) – Gabriel Staples Aug 29 '21 at 01:51
12

find / -size +1G -mtime +180 -type f -print

Here's the explanation of the command option by option: Starting from the root directory, it finds all files bigger than 1 Gb, modified more than 180 days ago, that are of type "file", and prints their path.

dr_
  • 28,763
  • 21
  • 89
  • 133