Como posso substituir este comando shell?

6

Eu tenho um comando find no qual desejo substituir uma lista de GIDs.

Aqui está o comando:

find / -follow \( -group 39 -o -acl_group 39 \) -exec ls -ln {} \; 2> $HOME/error.39.log 1> $HOME/results.39.log

Eu também tenho um arquivo com o conteúdo:

3  
100005  
21  
7   

Como posso substituir cada entrada no arquivo no comando find , de modo que seja criado um arquivo separado de saída e erro para cada um?

    
por conorgriffin 31.07.2012 / 19:37

2 respostas

4

Você não precisa invocar ls para obter as informações de stat , find já fez isso. Use algo assim em vez disso (mesma saída que ls -ln ):

find -follow \( -group 39 -o -acl_group 39 \) -printf '%M  %n %U %G %s %Cb %Cd %CH:%CM %p\n'

Veja a seção 3.2.2 do manual de busca GNU para mais informações sobre as diretrizes de formato.

Editar

Para aplicar isso a vários IDs de grupo de um arquivo:

while read; do
  find -follow \( -group $REPLY -o -acl_group $REPLY \) \
    -printf '%M  %n %U %G %s %Cb %Cd %CH:%CM %p\n'      \
    1> $HOME/results.$REPLY.log                         \
    2> $HOME/error.$REPLY.log
done < group_id_file
    
por 31.07.2012 / 20:39
2

Não tenho certeza se entendi a pergunta corretamente, mas não tenho como comentar porque sou novato em algum lugar ... Vamos tentar:

Que tal uma declaração? algo como:

for f in 'cat file_with_entries'; do
    find -follow \( -group $f -o -acl_group $f \) -exec ls -ln {} \; 2> $HOME/error.$f.log 1> $HOME/results.$f.log
done

Desculpe se não te entendi bem ...

    
por 31.07.2012 / 19:42