Como faço para suprimir mensagens de erro do cp?

7

Atualmente, estou procurando maneiras de suprimir o comando de erro no Linux, em particular, o comando cp .

Eu faço:

root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/.
cp: cannot stat '/srv/ftp/201*/wha*/*.jj': No such file or directory

Como suprimo a mensagem de erro que obtém impressa na tela? Ou seja, não quero ver essa mensagem de erro no meu monitor.

    
por andy_ttse 23.03.2015 / 18:58

5 respostas

23

Para suprimir a saída de erro em bash , anexe 2>/dev/null ao final do seu comando. Isso redireciona o filehandle 2 (STDERR) para /dev/null . Existem construções similares em outras camadas, embora a construção específica possa variar ligeiramente.

    
por 23.03.2015 / 19:03
5

Redirecionar a mensagem de erro (STDERR) para /dev/null :

root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/. 2>/dev/null

Exemplo:

$ cp /srv/ftp/201*/wha*/*.jj ~/.  ##Error message gets printed
cp: cannot stat ‘/srv/ftp/201*/wha*/*.jj’: No such file or directory

$ cp /srv/ftp/201*/wha*/*.jj ~/. 2>/dev/null  ##No error message gets printed
    
por 23.03.2015 / 19:02
4

Sua pergunta não está clara. A coisa mais sensata a fazer seria não executar cp quando o curinga não corresponder a nenhum arquivo, em vez de executar cp e ocultar a mensagem de erro.

Para fazer isso, se o shell for bash, defina o nullglob option para que o padrão de caractere curinga seja expandido para nada se não corresponder a nenhum arquivo. Em seguida, verifique se o padrão foi expandido para qualquer coisa e não chame cp nesse caso.

#!/bin/bash
shopt -s nullglob
files=(/srv/ftp/201*/wha*/*.jj)
if [[ ${#files[@]} -ne 0 ]]; then
  cp "${files[@]}" ~
fi

Em sh simples, teste se a glob foi deixada inalterada, apontando para um arquivo inexistente.

set -- /srv/ftp/201*/wha*/*.jj
if ! [ -e "$1" ] && ! [ -L "$1" ]; then
  cp "$@" ~
fi
    
por 24.03.2015 / 00:26
0

Adicione isto em ~ / .bashrc:

alias cp='cp 2> /dev/null'

então:

source ~/.bashrc
    
por 24.03.2015 / 02:13
0

você pode usar:
1 opção: 2>/dev/null .
Opção 2: 2>&1
Além disso, você pode usar isso no final do seu comando para suprimir as mensagens de erro:

Exemplo aqui -

$cp nofile.txt b.txt > log.txt 2>/dev/null

aqui você não pode recuperar nenhuma informação sobre a mensagem de erro. Ex2:

$cp nofile.txt b.txt > log.txt 2>&1

aqui você pode recuperar algumas informações do arquivo de log abaixo:

$ cat log.txt
cp: cannot stat 'nofile.txt': No such file or directory
    
por 29.12.2016 / 16:48