Move todos os arquivos que terminam com extensão de 3 letras, mas a última letra é “g” de “f”?

3
mv public_html/*.??[g,f] public_html/images/

Isso funcionaria? Para que todas as fotos / imagens com as extensões .jpg, .png e .gif sejam movidas.

(Eu não tenho o Linux instalado e usei um terminal online. Infelizmente, eles não têm fotos em seus arquivos)

    
por licrux 01.04.2018 / 11:22

2 respostas

5

[g,f] corresponde a g , , (vírgula) ou f . Você precisaria de [fg] apenas para f ou g .

Agora, tecnicamente.

mv public_html/*.??[gf] public_html/images/

Também moveria um arquivo chamado foo.x.f , pois ? também corresponde a . .

Além disso, se não houvesse nenhum arquivo compatível com esse padrão, algumas conchas como bash poderiam mover um arquivo chamado literalmente *.??[gf] ( um bug introduzido pela shell Bourne, corrigido novamente em zsh , você pode contorná-lo em bash com shopt -s failglob ).

Então, aqui para uma extensão de 3 caracteres que termina em f ou g , seria mais, mas ainda com a última ressalva ( [^.] em vez de [!.] com alguns shells):

mv public_html/*.[!.][!.][fg] public_html/images/

Para 3 letras :

mv public_html/*.[[:alpha:]][[:alpha:]][fg] public_html/images/

Para com jpg, png ou gif, com o shell zsh :

mv public_html/*.(jpg|gif|png) public_html/images/

Ou com ksh ou zsh -o kshglob ou bash -O extglob :

mv public_html/*.@(jpg|gif|png) public_html/images/
    
por 01.04.2018 / 11:37
4

Assumindo bash ou amigos, você pode usar

mv public_html/*.??[gf] public_html/images/

ou, para ser mais exato com correspondência

mv public_html/*.{jpg,png,gif} public_html/images/
    
por 01.04.2018 / 11:26

Tags