Coloque aspas em torno de $ x em todos os lugares em que aparece.
for x in 'find . -regex '.*/\*.*'' ; do mv "$x" 'echo "$x" | sed s/\*/_/g' ; done
Eu não consigo fazer isso funcionar:
Eu tenho centenas de arquivos que nosso desenvolvedor de banco de dados insere impropriamente asteriscos, de modo que nós temos arquivos assim:
*1*_Floorplan.jpg
Eu preciso recursivamente (dois níveis em) pesquisar e substituir todas as instâncias de " *
" em todos os nomes de arquivos e substituí-los por um sublinhado, " _
".
Eu tentei o seguinte, mas ele falha, exibindo o formato de uso do comando "mv" centenas de vezes (como se fosse para cada arquivo que ele teria tentado processar), como seria de esperar se eu tivesse uma sintaxe inválida , mas não consigo descobrir o que há de errado com isso:
for x in 'find . -regex '.*/\*.*'' ; do mv $x 'echo $x | sed s/\*/_/g' ; done
Isso está em um sistema Mac (10.4), então é um ambiente Darwin, se isso faz alguma diferença.
Por favor, ajude!
Você precisa escapar de todos os * com uma barra invertida \
Tags bash regex search-and-replace