Para renombrar recursivamente uso los siguientes comandos:
find -iname \*.* | rename -v "s/ /-/g"
Puedes usar find
para encontrar todos los archivos coincidentes recursivamente:
$ find . -iname "*dbg*" -exec rename _dbg.txt .txt '{}' \;
EDITAR: qué diablos '{}'
y \;
son?
El -exec
el argumento hace que find ejecute rename
por cada archivo coincidente encontrado. '{}'
será reemplazado con el nombre de ruta del archivo. La última ficha, \;
está ahí solo para marcar el final de la expresión exec.
Todo lo que se describe muy bien en la página de manual para encontrar:
-exec utility [argument ...] ;
True if the program named utility returns a zero value as its
exit status. Optional arguments may be passed to the utility.
The expression must be terminated by a semicolon (``;''). If you
invoke find from a shell you may need to quote the semicolon if
the shell would otherwise treat it as a control operator. If the
string ``{}'' appears anywhere in the utility name or the argu-
ments it is replaced by the pathname of the current file.
Utility will be executed from the directory from which find was
executed. Utility and arguments are not subject to the further
expansion of shell patterns and constructs.