Find Options
Among the core-utils, find
is one of the most useful commands. Though I use the basic functions
most of the time, find
has a wide range of parameters, and it comes in handy not only for finding
files, but also for operating a bunch of them at once. Here is a very simple example.
Imagine you have to move many files to a directory, but they all call different so a glob is no use, and
manually moving all of them is not an option. A possible approach would be to locate the first of the batch (for example
by running ls -lrth
). Suppose the first one of the batch is called /tmp/checkpoint
(for this example
let’s assume the files reside at /tmp
).
The command would be:
find /tmp -type f -anewer /tmp/checkpoint -exec mv '{}' <target_directory> \;
The -type f
part is important in order not to move the entire directory (find only the files). Then
we have the -anewer
that receives a file as a parameter, and it will filter for those files whose
modification date is greater than the file used as an example (hence, this must be the start of the batch), and
finally the -exec
part is interesting because as mentioned at the beginning, it allows to perform
arbitrary operations on the group of files (in this case to move them to another location, but
other actions such as modifications, sed
, etc. are also possible).
Another trait I like about find
is that presents a secure and well-defined interface, meaning that in
some cases I can first check the results prior to execute an action. For example, if we would like to check
for deleting some unnecessary files:
find . -name "*.pyc"
By issuing this command we list some files to erase. And then we can simply do that by appending -delete
to the very same command.
This is just the tip of the iceberg of the things that are possible by means of the find
command and
its various options.