The trick is to use the find
command with the -exec
or -execdir
parameter. I needed to remove all the files named serials_dev.db3 from multiple backup directories. The following did the job:
find . -type f -name "serials_dev.db3" -exec rm -f {} ;
Here are the relevant parts from the find
man page:
-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 pro‐ cessed 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 start‐ ing directory. There are unavoidable security problems sur‐ rounding 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 num‐ ber 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 subdi‐ rectory 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 condi‐ tions 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 refer‐ ence `.'; 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.
in my case, I had to use -type d instead of -d for the find comnmad:find /var/www/vhosts -type d -name wp-includes -print -exec grep wp_version {}/version.php ;-d seems to be a depth parameter, whereas in your case you’re searching for any directories called wp-includes .James