Use o teste para verificar a condição com a opção find e execdir

1

Acho que posso manter minha pergunta curta. Por que o seguinte comando não produz saída?

find /usr/share/themes -mindepth 1 -maxdepth 1 -type d -execdir test -d {}/gnome-shell \;

Eu esperava que ele imprimisse todas as pastas em / usr / share / themes que contivessem uma pasta gnome-shell . Vários sites sugerem que esse uso do teste como um comando em exec / execdir é possível.

De man find :

-exec command ;
              Execute  command;  true  if 0 status is returned. [...]
    
por slosd 25.10.2012 / 00:26

2 respostas

2

–exec and –execdir evaluate to true if the named program returns a 0 value as its exit status.

Isso significa que, se você dissesse algo como –execdir test -d {}/gnome-shell \; –print ou –exec … \; –something , a coisa após o –exec seria processada se e somente se o comando test retornasse verdadeiro. Como um exemplo extremo, você poderia até dizer

find starting_dir … –execdir test –d {}/gnome-shell \; –exec rm –rf {} \;

embora não seja necessariamente a melhor maneira de fazer isso.

    
por 25.10.2012 / 01:36
1

test não produz nada, apenas retorna o status de saída.

No entanto, se você estiver testando apenas com profundidade 1, poderá evitar find completamente:

ls -d /usr/share/themes/*/gnome-shell
    
por 25.10.2012 / 00:32