¿Cómo suprimo los mensajes de error de cp?

13

Actualmente estoy buscando formas de suprimir el comando de error en Linux, en particular, el comando cp.

Hago:

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

¿Cómo suprimo el mensaje de error que se imprime en la pantalla? Es decir, no quiero ver este mensaje de error en mi monitor.

andy_ttse
fuente
1
solo para su información, la mejor manera de verificar errores es mediante códigos de salida. La canalización de STDERR a / dev / null es estándar y eliminará cualquier indicación visual de errores, pero la comprobación de un estado de retorno distinto de cero le permitirá saber si hubo un error o no, al menos así es como se supone que debe ser. ...
Nathan McCoy
Tu pregunta no está clara. ¿Desea ocultar todos los mensajes de error de cp? ¿O no desea recibir ningún mensaje de error si el comodín no coincide con ningún archivo? ¿O algún otro criterio?
Gilles 'SO- deja de ser malvado'

Respuestas:

38

Para suprimir la salida de error bash, agregue 2>/dev/nullal final de su comando. Esto redirige el controlador de archivos 2 (STDERR) a /dev/null. Hay construcciones similares en otras capas, aunque la construcción específica puede variar ligeramente.

John
fuente
Me pregunto por qué nunca pensé en eso xx
Abdul
8

Redireccionar el mensaje de error (STDERR) a /dev/null:

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

Ejemplo:

$ 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
heemayl
fuente
5

Tu pregunta no está clara. Lo más sensato sería no ejecutar cpen absoluto cuando el comodín no coincida con ningún archivo, en lugar de ejecutar cpy ocultar el mensaje de error.

Para hacer eso, si el shell es bash, configure la nullglobopción para que el patrón comodín se expanda a nada si no coincide con ningún archivo. Luego verifique si el patrón se expandió a algo, y no llame cpen ese caso.

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

En sh simple, compruebe si el globo no se modificó, señalando un archivo inexistente.

set -- /srv/ftp/201*/wha*/*.jj
if ! [ -e "$1" ] && ! [ -L "$1" ]; then
  cp "$@" ~
fi
Gilles 'SO- deja de ser malvado'
fuente
Esta es la técnica necesaria si no desea que cp arroje un error desde un script de shell, o al menos no soy un experto, pero este es el que parece funcionar.
NessBird
0

Agregue esto en ~ / .bashrc:

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

entonces:

source ~/.bashrc
M122
fuente
2
Recomendar que esto se haga permanentemente me parece una tontería. Parece una idea mucho mejor solo tubo stderrpara /dev/nullcuando la salida de error es no deseado. O usando un nombre diferente a cp.
HalosGhost
Estoy de acuerdo con usted, pero esta es una solución para alguien que no quiere ver ningún mensaje de error en su monitor cp.
M122
-1

puede utilizar cualquiera:
Opción 1: 2>/dev/null.
Opción 2: 2>&1
además de que puede usar esto al final de su comando, suprimirá los mensajes de error:

Ejemplo aquí

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

aquí no puede recuperar ninguna información sobre el mensaje de error. Ex2:

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

Aquí puede recuperar información del archivo de registro a continuación:

$ cat log.txt
cp: cannot stat `nofile.txt': No such file or directory
jeevan kishore
fuente