Se você precisar renomear arquivos em subdiretórios, e seu find
suportar o predicado -execdir
, você poderá fazer
find /search/path -depth -name '* *' \
-execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;
Obrigado a @glenn jackman por sugerir a opção -depth
para find
e me fazer pensar.
Note que em alguns sistemas (incluindo os GNU / Linux), find
pode não encontrar arquivos cujo nome contenha espaços e também sequências de bytes que não formam caracteres válidos (típico de arquivos de mídia com nomes com Caracteres ASCII codificados em um conjunto de caracteres diferente do locale). Definir a localidade como C
(como em LC_ALL=C find...
) resolveria o problema.