Usando o comando find

4

Eu tenho um monte de diretórios. Dentro desses diretórios, há uma carta de apresentação e um arquivo zip de trabalho. Eu queria fazer uma consulta rápida e fácil para abrir todas as cartas de apresentação para que eu possa decidir se vale a pena olhar para a pasta de trabalho.

find . | grep cover\.pdf | xargs open    #OS X has open linked to "open" the file

Isso não funciona. Eu também tenho muddied com várias variações de print0 , xargs -0 com pouco sucesso. Qual é a maneira correta de fazer isso?

    
por Josh K 24.08.2010 / 18:46

3 respostas

3

Primeiro, verifique sempre quais versões do find / xargs você realmente usa na caixa do Mac-OSX. Talvez você espere o comportamento / opções do BSD / GNU e use as versões do GNU / BSD.

Não sei se aberto suporta vários argumentos. Se não, chame xargs assim:

xargs -n 1 open

(o que significa que xargs executa para cada argumento um processo extra aberto)

E lembre-se de que find | xargs sem -print0/-0 deverá falhar se seus nomes de arquivo / caminhos contiverem espaços.

Aha, se você usar algo como

find -print0 | grep something | xargs -0 foo

então grep é confuso com todos os caracteres grep .

O GNU -z (pelo menos) conhece a opção grep . Assim, o que deve funcionar é:

find -print0 | grep -z something | xargs -0 foo

Verifique que grep versão você usa via

grep --version

Ou verifique a página man do seu suporte %code% for %code% (zero character).

    
por 24.08.2010 / 20:07
2

Isso deve funcionar:

find . -name cover\.pdf -exec open '{}' \;

Você pode testar assim:

find . -name cover\.pdf -exec ls -l '{}' \;

Não tenho certeza de como é a aparência da página man no OSX, mas há vários exemplos na página man do find, se você procurar por EXAMPLES. Eu sempre me vejo refrescando meu cérebro, verificando isso.

    
por 24.08.2010 / 18:57
1

Se o seu xargs no seu sistema suporta a opção -n você pode tentar seguir.

find . | grep cover\.pdf | xargs -n 1 open

    
por 24.08.2010 / 20:03

Tags