Linux / Ubuntu - Como encontro todos os arquivos com parênteses?

1

Eu tenho uma lista grande de arquivos em várias pastas. Alguns arquivos estão causando problemas, por isso preciso renomear os parênteses para outra coisa, qualquer outra coisa.

Estou tentando usar esses comandos para encontrar todos os arquivos com "(" ou ")".

Obviamente, isso não funcionaria:

find . -name *(*

Eu preciso escapar do "(" caractere:

find . -name *\(*

ou

find . -name '*\(*'

ou

find . -name "*\(*"

Nenhum dos trabalhos acima.

No final, quero que o seguinte funcione:

'find . -name '*.*' -prune -o -exec rename 's/\*/(*$/\OOOO/i' {} +'  

O acima deve renomear qualquer "(" caractere para 0000 (por exemplo, documento (julho) .xls mudaria para Document0000July) .xls)

então

find . -name '*.*' -prune -o -exec rename 's/\*/)*$/11/i' {} +

isto deve renomear qualquer caractere ")" para 1111 (por exemplo, Document0000July) .xls mudaria para Document0000July1111.xls)

alguma ideia?

Obrigado

    
por Tom G11 29.05.2013 / 19:40

1 resposta

2

uma solução simples e bastante portátil (mas que poderia ser bloqueada em casos especiais de nomes de arquivos ... um mais robusto poderia ser preparado se você tiver uma versão recente do GNU xargs e encontre):

find . \( -name '*(*' -o -name '*)*' \) -print > ze_list
while read a_line ; do 
   echo mv "$a_line" "$(echo "$a_line" | sed -e 's/(/0000/g' -e 's/)/1111/g')" ; 
done < ze_list

Então, se você está confiante de que faria o que queria, tire o 'eco'

(não se preocupe, pois o shell está ocultando as aspas circunvizinhas (") ao usar echo, mas elas estarão lá para garantir que" mv "receba apenas 2 argumentos, uma origem e um destino.

o "$ (.... | ....)" é onde a substituição aparece. As aspas ao redor são importantes para que o nome resultante, mesmo que contenha espaços, ainda seja considerado um (1) argumento.

    
por 29.05.2013 / 20:07