1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

localizar ficheiros no linux

Discussão em 'Dúvidas e Suporte Técnico - GNU/Linux & *nix' iniciada por van_Zeller, 18 de Setembro de 2008. (Respostas: 4; Visualizações: 2100)

  1. van_Zeller

    van_Zeller Power Member

    Boas,

    Estou ainda a dar os primeiros passos na consola e preciso aqui de algumas ajudas. Quero introduzir um comando que localize todos os ficheiros com extensão jpg que tenham a palavra small no nome e de seguida quero elimina-los. Logo à partida não percebo muito bem como funciona o comando find, mas enfim, lá me arranjei. Tentei o seguinte:
    Código:
    find /media/documents/documents/Musica/ -iname '*.jpg' | grep Small | xargs rm 
    
    O problema é as paths da maioria destas tais imagens têm espaços no nome (ex. o album dos Presidents of the USA que se chama "Freaked Out And Small", pelo que retorna algo como isto:

    Código:
    rm: cannot remove `Freaked': No such file or directory
    rm: cannot remove `Out': No such file or directory
    rm: cannot remove `and': No such file or directory
    rm: cannot remove `Small/AlbumArt_{29C87FF2-A39F-44CE-B4EE-E3A76FBC8696}_Large.jpg': No such file or directory
    
    Alguma ideia? Obrigado
     
  2. countzero

    countzero Power Member

    Código:
    find /media/documents/documents/Musica/ -iname '*.jpg' | grep Small | xargs -d '\n' rm
    
    Ou de outro modo (Small fica também case insensitive):
    Código:
    find /media/documents/documents/Musica -iname '*Small*.jpg' -print0 | xargs -0 rm
    
    Cumps,
    JP
     
    Última edição: 18 de Setembro de 2008
  3. van_Zeller

    van_Zeller Power Member

    Obrigado pela resposta. Podes explicar um bocadinho, para eu perceber?
     
  4. countzero

    countzero Power Member

    Olá.

    Segundo o manual do xargs:

    Tu estavas a ter o problema porque, por omissão, o xargs interpreta espaços em branco como separadores de comandos; sendo o teu caso, no primeiro exemplo utilizei o argumento -d '\n' para interpertar o caracter '\n' (nova linha) como separador de comandos.


    No entanto, existe uma solução mais geral, que funciona mesmo para ficheiros com '\n' no nome: consiste em terminar os comandos com NULL ('\0'); utilizei essa solução no segundo exemplo.

    Mais alguma questão, apita :)

    Cumps,
    JP
     
  5. van_Zeller

    van_Zeller Power Member

    Obrigado pelas respostas, vou agora implementar e se tiver duvidas volto.

    vZ
     

Partilhar esta Página