find to the rescue
find has many filters to help you locate the files you're looking for.
find
is a cool piece of software.
It basically helps you find (didn't see that coming, huh?) files matching criteria.
🕵🏻♂️ Basic filters
One of the most common criteria is -name
.
You're looking for a file, but you only remember parts of its name? find
to the rescue!
find . -name "foo*"
find . -name "*bar*"
find . -name "*.baz"
You want to discover the files modified in the last five minutes?
find . -mmin -5
This recently helped me discover what files Ubuntu created when setting up a keyring, in order to automate the deployment of desktop machines.
🚜 Executing actions & deleting
Filters can be combined and a special -exec
filter allows you to create entirely rules.
It also runs the command on all files, helping you run actions instead of filtering if that's what you're after.
E.g. count the lines of all markdown files with a modification date older than 5 days:
find . -mtime +5 -type f -name "*.md" -exec wc -l {} +
Special -exec
rules:
{}
is used as a placeholder: the file names will be placed at this position in the command execution.- the statement must be terminated by either
\;
or+
\;
will apply the command to a single file at a time+
will apply the command to all files at the same time
The escaping before the semicolon is necessary, otherwise shells would interpret it as the end of the command and find
would complain about the missing character.
Since deleting is a common action, it has its own flag:
find . -name "*.pyc" -delete
📚 Further reading
I don't think I ever had to use any more filters, but there are a lot more!
I don't intend on covering them all here, especially since I don't know half of them. RTFM!
tldr find
man find