Click here to Skip to main content
15,904,288 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
find $file_path -mtime +1 -name "*log.*" -exec rm {} \; -exec echo {} 'was deleted' \;

What I have tried:

This works well, but I need to know how we are using that -exec thing in this code.
Posted
Updated 19-Jan-18 21:58pm

find(1) - Linux man page[^] explains that to you:
Quote:
-exec command ;
Execute command; true if 0 status is returned. All following arguments to find are taken to be arguments to the command until an argument
consisting of ';' is encountered. The string '{}' is replaced by the current file name being processed everywhere it occurs in the arguments to the command,
not just in arguments where it is alone, as in some versions of find. Both of these constructions might need to be escaped (with a '\') or quoted to
protect them from expansion by the shell. See the EXAMPLES section for examples of the use of the -exec option. The specified command is run once
for each matched file. The command is executed in the starting directory. There are unavoidable security problems surrounding use of the -exec action;
you should use the -execdir option instead.
-exec command {} +
This variant of the -exec action runs the specified command on the selected files, but the command line is built by appending each selected file name
at the end; the total number of invocations of the command will be much less than the number of matched files. The command line is built in much the same way
that xargs builds its command lines. Only one instance of '{}' is allowed within the command. The command is executed in the starting directory.
-execdir command ;
-execdir command {} +
Like -exec, but the specified command is run from the subdirectory containing the matched file, which is not normally the directory in which you
started find. This a much more secure method for invoking commands, as it avoids race conditions during resolution of the paths to the matched files. As
with the -exec action, the '+' form of -execdir will build a command line to process more than one matched file, but any given invocation of
command will only list files that exist in the same subdirectory. If you use this option, you must ensure that your $PATH environment variable
does not reference '.'; otherwise, an attacker can run any commands they like by leaving an appropriately-named file in a directory in which you will run
-execdir. The same applies to having entries in $PATH which are empty or which are not absolute directory names.
 
Share this answer
 
See find(1) - Linux man page[^] or type man find at the shell prompt.

The exec argument runs the specified shell command or executable where {} is replaced by the actually processed file name and \; is the end of command marker (following arguments are again find arguments).
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900