Como passar a saída do comando anterior para o próximo como um argumento

0

Estou com dificuldades para descobrir como passar a saída de um comando para outro como argumento.

Especificamente, eu quero passar a lista dos atributos estendidos de um arquivo no FreeBSD, com lsextattr e passe sua saída para rmextattr para remover todos os atributos estendidos. Sim, eu preciso fazer isso porque o rmextattr não tem uma opção recursiva ...

Estou tentando algo assim sem sorte:

# lsextattr -q user some_file.txt | rmextattr user "$1" some_file.txt 
rmextattr: some_file.txt: failed: Attribute not found

Eu acho que o lsextattr está funcionando corretamente, mas não pode passar sua saída para o rmextattr corretamente !!

# lsextattr -q user some_file.txt
DosStream.com.apple.lastuseddate#PS:$DATA   DosStream.AFP_AfpInfo:$DATA

Por favor, ajude ......

    
por vicmarto 19.10.2017 / 19:09

1 resposta

1

IIUC, rmextattr só pode obter um atributo estendido por vez. Portanto, você terá que percorrer os atributos estendidos que lsextattr retorna e remover cada um deles; algo assim:

for attr in $(lsextattr -q user some_file.txt) ;do
    rmextattr user $attr some_file.txt
done

(não testado - não tenho acesso a um sistema FreeBSD no momento).

Em resposta à pergunta no comentário:

for file in $(find ...) ;do
    for attr in $(lsextattr -q user $file) ;do
        rmextattr user $attr $file
    done
done

Eu não sei quais são seus critérios para os arquivos que você deseja considerar, mas você pode experimentar com find até obter exatamente a lista desejada e, em seguida, conectar o comando resultante à parte $(find ...) do loop externo.

    
por 19.10.2017 / 19:33