não mostra erro se o arquivo não existe na cópia, sem enviar para o dev nulo

1

Eu quero evitar que meu script postar um erro se eu tentar cp um arquivo que não existe. No entanto, gostaria que as mensagens de erro fossem impressas para qualquer outro erro, como permissões insuficientes. Isso significa que não posso enviar as mensagens para dev / null. que outras soluções existem para fazer isso em um script?

Uma opção é uma declaração if para verificar se o arquivo existe antes de copiar, mas parece uma abordagem desordenada. Acho que posso conseguir o que quero adicionando um * no nome do arquivo, embora pareça uma maneira estranha de fazer as coisas. existe algum argumento de linha de comando ou outra maneira de conseguir o que eu quero?

    
por dsollen 19.12.2014 / 18:43

2 respostas

2

Verificar a existência reduzirá o problema, mas no caso mais geral, é uma condição de corrida. O arquivo ainda pode ser removido entre a verificação e a tentativa de cópia.

Talvez apenas capture todos os erros e solte qualquer um para "o arquivo não existe".

Cópia normal:

$ cp noexist bar /tmp
cp: cannot stat 'noexist': No such file or directory
cp: cannot open 'bar' for reading: Permission denied

Modificado

$ cp noexist bar /tmp 2>&1 | grep -v "No such file or directory" >&2
cp: cannot open 'bar' for reading: Permission denied
    
por 19.12.2014 / 20:02
1

Você pode gostar de:

{ command <doesntexist cp doesntexist 2>&3 ; } 3>&2 2>/dev/null

Pode ser mais curto em uma subshell ...

( <file cp file ... 2>&3 ) 3>&2 2>/dev/null

Mas ainda parece muito difícil fazer ...

[ -r file ] && cp file ...

Todos eles só testam arquivos legíveis - eles não funcionam para diretórios ...

Mas ...

[ -e file ] && cp file ...

... poderia ...

    
por 19.12.2014 / 19:53

Tags