localizar ficheiros no linux

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
 
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:
Olá.

Segundo o manual do xargs:

(...) xargs reads items from the standard input, delimited by blanks (...)
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.

(...) Because Unix filenames can contain blanks and newlines, this default behaviour is often problematic; filenames containing blanks and/or newlines are incorrectly processed by xargs. In these situations it is better to use the '-0' option, which prevents such problems. When using this option you will need to ensure that the program which produces the input for xargs also uses a null character as a separator. If that program is GNU find for example, the '-print0' option does this for you.
Mais alguma questão, apita :)

Cumps,
JP
 
Back
Topo