Tentando criar um one-liner para encontrar arquivos que não estão na lista de arquivos

0

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

    O
  1. cmd-filter pode retornar 0 para falhar ou gerar uma saída de uma lista falsa se passar por um caminho falso (é um controle remoto falso).
  2. cmd-list é apenas um achado de profundidade. Uma falha aqui não é de todo ruim, porque mesmo um erro de digitação apenas significa que o próximo programa gvfs-trash que receberá a saída canalizada não será executado em nada. Seria útil se um erro de digitação causasse uma falha.

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.

    
por i30817 30.07.2017 / 01:15

0 respostas

Tags