Excluir vários arquivos com regex

3

Eu tenho pasta com subpastas com os mesmos arquivos, por exemplo:

 dsc_9660__content_w.jpg
 dsc_9660__content.jpg
 dsc_9660__h70.jpg
 dsc_9660__small.jpg
 dsc_9660.jpg

Sufixo - são tamanhos diferentes de imagens.

Como excluir todos os arquivos com sufixo como este: __[a-zA-z0-9].(png|jpg|jpeg) ?
E mantenha apenas imagens originais sem sufixo como dsc_9660.jpg no meu exemplo

    
por user1946758 09.01.2015 / 12:00

3 respostas

4

Experimente o comando encontrar com o seu -regex switch ou -iregex (não diferencia maiúsculas de minúsculas), altere seu regex para .*__[a-zA-z0-9_]*\.(png|jpg|jpeg) e use a opção -delete para excluir o arquivo correspondente:

find . -type f -regextype "posix-egrep" -iregex '.*__[a-zA-z0-9_]*\.(png|jpg|jpeg)$'

Você pode usar outros tipos de -regextype (que é trabalhado) no lugar de "posix-egrep" como: "posix-extended" ou "posix-awk".

-regex pattern
    File  name matches regular expression pattern.  This is a match on the whole path, not a search.  For
    example, to match a file named './fubar3', you can use the regular expression '.*bar.'  or '.*b.*3',
    but not 'f.*r3'. The regular expressions understood by find are by default Emacs Regular Expres‐
    sions, but this can be changed with the -regextype option.

-iregex pattern
    Like -regex, but the match is case insensitive.

-regextype type
    Changes the regular expression syntax understood by -regex and -iregex tests which occur later on the
    command line. Currently-implemented types are emacs (this is the default), posix-awk, posix-basic,
    posix-egrep and posix-extended.

-delete
    Delete files

No final, adicione -delete switch ao comando para excluir os arquivos correspondentes:

find . -type f -regextype "posix-egrep" -iregex '.*__[a-zA-z0-9_]*\.(png|jpg|jpeg)$' -delete
.*__[a-zA-z0-9_]*\.(png|jpg|jpeg)
  • O .* corresponde a tudo antes de __
  • O __ corresponde a underscores duplos.
  • O [a-zA-z0-9_]* corresponde a todos os caracteres alfanuméricos e um único sublinhado _ . O * significa que essa classe de caracteres pode ter comprimento zero.
  • O \. corresponde a um único ponto. Para coincidir com um ponto ( . ) literalmente você precisa escapar dentro da expressão regular usando uma barra invertida; sem escapar, corresponde a qualquer caractere único.
  • No (png|jpg|jpeg) , o par de parênteses faz com que seja um grupo de correspondências. Corresponde a png ou ( | ) jpg ou jpeg .
  • A $ anchor, corresponde ao final da string (ou nomes de arquivos, neste caso)

Debuggex Demo e teste em arquivos

por devWeek 09.01.2015 / 13:26
0

Experimente o comando abaixo,

cd <dir>
find . -type f -iname \*.jpg -delete

-type ---- > digite o tipo do arquivo (__ [a-zA-z0-9]. (png | jpg | jpeg)) e faça uso do comando.

Espero que isso ajude.

    
por vembutech 09.01.2015 / 12:22
0
cd <dir>
find . -type f -iname \*__*.jpg -delete
    
por LonsomeHell 09.01.2015 / 14:40

Tags