- Find all files modified in the last 90 minutes
find . -type f -mmin -90
- Find all files and do something to each one
find . -type f -mmin -90 | xargs ls -l
- Find all files modified before 2 days ago
find . -type f -mtime +2
- Removing files older than 7 days
find . -type f -mtime +7 -name '*.gz' -exec rm {} \;
- Find all files modified after last 2 days
find . -type f -mtime -2
- Find all files modified at the last 2 day mark
find . -type f -mtime 2
With zsh you don't need to use find, fd, or any other external tool.
zsh's built-in globbing features can be used instead.
- Find all files modified in the last 90 minutes
print -l **/*(mm-90)
- Find all files and do something to each one
print -l **/*(mm-90) | xargs ls -l
- Find all files modified before 2 days ago
print -l **/*(m+2)
- Removing files older than 7 days
zargs -- **/*(m+7) -- rm
- Find all files modified after last 2 days
print -l **/*(m-2)
- Find all files modified at the last 2 day mark
print -l **/*(m2)
In most of the above examples "print -l" is used to print the results to the terminal, but you can instead use whatever command you want (as in the "rm" example above).
The zsh rm command doesn't with too many (say, 100 000) files, execve() fails with: Argument list too long. This works and it is relatively fast (runs rm in big batches): find ... | xargs -d '\n' rm --
Depending on how you name your files, you want to add -print0 to your find and -o to your xargs. If you have spaces in your file names you want that to carry over in your xargs.
Secondly, you may want to add -n 200 to your xargs so if you have very, very many files bash doesn't complain.
So:
Find all files and do something to each one
find . -type f -mmin -90 -print0 | xargs -0 -n 1024 ls -l