Isso é mais um desafio do que qualquer coisa: pode ser feito com segurança e elegância em uma linha?
O principal problema, tanto os padrões quanto os arquivos são resultado de comandos que podem falhar.
grep -Fxvf <(cmd-filter) <(cmd-list) | xargs -d "\n" gvfs-trash
Obviamente, o principal problema é o primeiro. Se falhar por algum motivo, ou estiver vazio devido a um erro de digitação, todos os arquivos impressos por cmd-list serão descartados. Eu gostaria de evitar isso, para dizer o mínimo.
Eu li sobre o homem que grep -f
deve falhar grep se cmd-filter está vazio, mas eu não tenho experimentado isso no acima. Se eu substituir o cmd-filter por echo ""
i, obtenho todos os arquivos em cmd-list. E o fracasso de outras razões?
edite: pensando nisso, isso pode ser devido à opção -v, que é necessária para inverter a correspondência para obter as linhas que não estão na lista cmd. Se assim for, acho estranho que a combinação invertida da lista de padrões vazios seja tudo.
De qualquer forma, desde que a elegância pode ser impossível, e se não houver uma boa resposta que não seja 'apenas faça um script, seus preguiçosos' eu ainda marcarei uma hack de linha única que use arquivos tmp ou similares.
edit: eu mesmo 'falhei' neste desafio e usei um longo script (ab) usando vars e processo de substituição para faça isso. Descobri que eu não precisava verificar o status de erro e se o stdout estava vazio no filtro cmd também, porque em todos os casos de erro eu achei que estava vazio também.