Substituir caractere curinga em nomes de arquivo

3

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!

    
por neezer 29.09.2009 / 03:25

2 respostas

4

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
    
por 29.09.2009 / 03:44
0

Você precisa escapar de todos os * com uma barra invertida \

    
por 29.09.2009 / 03:42