Há uma resposta do SuperUser , que renomeia nomes de arquivos que contêm espaços em branco:
for f in *\ *; do mv "$f" "${f// /_}"; done
A parte que não entendo é *\ *
.
O autor escreveu que:
*\ *
Seleciona todos os arquivos com um espaço no nome como entrada para o loop for. O padrão X seleciona todos os arquivos com X no nome e, para o caractere especial espaço, precisamos usar uma barra para que o bash não o trate como uma separação de argumentos.
Já que *
não corresponde a um espaço, por que *\ *
também corresponde a arquivos com vários caracteres de espaço quando ele só tem um espaço?