Como recursivo regexp renomear traços duplos

0

Estou usando a galeria Wordpress Eazyest para criar 2000 galerias. Alguns arquivos possuem traços duplos ou triplos em nomes de arquivos. Por exemplo: abc --- def.jpg Esses arquivos são enviados via FTP.

No Wordpress, o administrador e o HTML do front-end são substituídos; esse arquivo recebe o nome abc-def.jpg, então eles se tornam links quebrados / src.

Existe uma maneira que eu possa substituir all --- 's ou -' s em uma pasta com um único caractere usando o SSH? Eu estou no Ubuntu 12.04.

    
por user3155044 02.01.2014 / 22:50

3 respostas

1

Para combinar / alterar esse padrão em um único diretório, ele deve ser tão simples quanto

rename -- 's/-+/-/' *.jpg

(substitua um ou mais traços consecutivos por um único traço), mas execute primeiro um teste seco adicionando os sinalizadores -n e -v

rename -nv -- 's/-+/-/' *.jpg

Se houver várias instâncias dos vários traços em um único nome (por exemplo, abc --- def - ghi.jpg), será necessário adicionar uma opção g (global)

rename -- 's/-+/-/g' *.jpg

Se você precisar alterar os nomes nos subdiretórios de galeria recursivamente, poderá usar o comando renomear como uma ação exec para um comando find , por exemplo,

find /path/to/dir -name '*.jpg' -exec rename -nv -- 's/-+/-/g' {} +

ou, se o seu shell remoto suportar a opção globstar shell, você pode tentar fazer o comando rename agir recursivamente sozinho, usando um glob como **/*.jpg

    
por steeldriver 02.01.2014 / 23:34
0
  1. ssh na caixa do Ubuntu na qual você instalou o Wordpress;
  2. cd no diretório principal que contém todas as galerias;
  3. executar find -iname '*--*' -exec sh -c 'mv "{}" "$(echo {} | tr -s '-')"' \; .
por Vanni Totaro 02.01.2014 / 23:32
0

Supondo apenas um conjunto de --- ou -- em cada arquivo:

#!/bin/bash -e

## Substitute /path/to/folder for the root folder
if cd /path/to/folder
then
    find . -name '*---*.jpg' -exec bash -c 'file={}; mv -v "${file}" "${file/---/-}"' ';'
    find . -name '*--*.jpg' -exec bash -c 'file={}; mv -v "${file}" "${file/--/-}"' ';'
fi

ssh na máquina, em seguida, execute o código acima, substituindo /path/to/folder da pasta raiz por todos os arquivos.

    
por kiri 02.01.2014 / 23:36