Estoy usando Mac OS X. Estoy tratando de copiar algunos archivos con el comando cp para un script de compilación como este.
cp ./src/*/*.h ./aaa
Pero este comando genera un error si no hay un archivo .h en el directorio ./src. ¿Cómo hacer que el comando no active el error? (falla silenciosa) El error hace que falle el resultado de la compilación, pero solo quiero copiar cuando solo hay algún archivo de encabezado.
:
significa en este contexto.cp
(si se desea). El shell incorporadotrue
podría utilizarse en su lugar y sería más legible.:
: ¿Cuál es el propósito de `: '(colon) GNU Bash Builtin?cp
no está dePATH
alguna manera ...)Estás buscando algo en la línea de
(Desafortunadamente, la
-f
opción no es el droide que estás buscando).Si quieres igualar un globo, eso no funcionará; utilizar
find
en su lugar, por ejemplo:fuente
set -e
y el archivo desaparece entre[
lascp
invocaciones y, el script se bloqueará).Antigua pregunta, pero aún podría ser relevante para otros.
Si no necesita usar cp, puede intentarlo con rsync.
Para copiar todos los archivos de un origen a un directorio de destino, ejecute:
Rsync viene con la mayoría de los sistemas tipo Unix, como Linux, Mac OS X o FreeBSD.
fuente
--ignore-missing-args
:rsync -av --ignore-missing-args ./src/*/*.h ./aaa
Esto tiene la ventaja sobre--ignore-errors
que los únicos errores ignorados son aquellos relacionados con los archivos fuente que no existen. Con--ignore-errors
cada error se ignora, lo que puede ser peligroso. Además, tenga en cuenta que este parámetro es bastante reciente, por lo que podría no estar presente en las versiones anteriores de rsync.Canalizar el resultado a verdadero asegura que el comando siempre tendrá éxito. He intentado esto en Linux pero no en ningún Mac OS:
fuente
|
siempre se ejecuta mientras||
solo se realiza en caso de error. Ytrue
generalmente es un sistema binario, mientras que el colon:
está integrado y no consume un PID.Podría forzar el estado de error correcto. Con una función:
Dado lo siguiente:
La copia regular devolverá un error. Devolverá un estado de salida de 1.
Si usamos la función cpalways () anterior, se ocultarán los errores:
fuente