AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 153875
Accepted
Eonil
Eonil
Asked: 2010-06-23 18:55:30 +0800 CST2010-06-23 18:55:30 +0800 CST 2010-06-23 18:55:30 +0800 CST

Como deixar o comando 'cp' não disparar um erro quando o arquivo de origem não existe?

  • 772

Estou usando o Mac OS X. Estou tentando copiar alguns arquivos com o comando cp para um script de compilação como este.

cp ./src/*/*.h ./aaa

Mas este comando dispara um erro se não houver nenhum arquivo .h no diretório ./src. Como fazer o comando não disparar o erro? (falha silenciosa) O erro faz com que o resultado da compilação falhe, mas eu só quero copiar quando houver apenas algum arquivo de cabeçalho.

shell copy
  • 6 6 respostas
  • 150290 Views

6 respostas

  • Voted
  1. Best Answer
    Dennis Williamson
    2010-06-23T20:07:05+08:002010-06-23T20:07:05+08:00

    Se você está falando sobre a mensagem de erro, você pode suprimi-la enviando-a para o bucket de bits:

    cp ./src/*/*.h ./aaa 2>/dev/null
    

    Se você deseja suprimir o código de saída e a mensagem de erro:

    cp ./src/*/*.h ./aaa 2>/dev/null || :
    
    • 122
  2. Brad Ackerman
    2010-06-23T19:19:57+08:002010-06-23T19:19:57+08:00

    Você está procurando por algo ao longo das linhas de

    if [ -e file ]
     then cp file /somewhere
    fi
    

    (Infelizmente, a -fopção não é o droid que você está procurando.)

    Se você quiser combinar um glob, isso não funcionará; use findem vez disso, por exemplo:

    find ./src -name \*.h -exec cp {} ./destination \;
    
    • 20
  3. mre
    2015-08-23T08:22:20+08:002015-08-23T08:22:20+08:00

    Pergunta antiga, mas ainda pode ser relevante para outros.
    Se você não precisa usar cp, você pode tentar com rsync.
    Para copiar todos os arquivos de uma origem para um diretório de destino, execute:

    rsync -avzh --ignore-errors /path/to/source /path/to/destination
    

    O Rsync vem com a maioria dos sistemas do tipo Unix, como Linux, Mac OS X ou FreeBSD.

    • 13
  4. Vivek
    2015-02-07T08:41:14+08:002015-02-07T08:41:14+08:00

    Encaminhar o resultado para true garante que o comando sempre seja bem-sucedido. Eu tentei isso no Linux, mas não em qualquer Mac OS:

    cp ./src/*/*.h ./aaa | true
    
    • 12
  5. Stefan Lasiewski
    2010-06-23T20:12:11+08:002010-06-23T20:12:11+08:00

    Você pode forçar o status de erro correto. Com uma função:

    $ cpalways () { cp $1 $2 2>/dev/null ; return 0 ; }
    

    Dado o seguinte:

    $ ls foo bar baz
    ls: baz: No such file or directory
    bar foo
    

    A cópia normal retornará um erro. Ele retornará um status de saída de 1.

    $ cp baz bar ; echo $?
    cp: baz: No such file or directory
    1
    

    Se usarmos a função cpalways() acima, quaisquer erros serão ocultados:

    $ cpalways baz bar ; echo $?
    0
    $ cpalways foo bar ; echo $?
    0
    $ cpalways baz bar ; echo $?
    0
    
    • 2
  6. Hemant_Negi
    2021-03-30T09:05:53+08:002021-03-30T09:05:53+08:00

    Isso funciona

    $(cp ./src/*/*.h ./aaa | true)

    • -1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Como você reinicia o php-fpm?

    • 18 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Resolver o nome do host do endereço IP

    • 8 respostas
  • Marko Smith

    Como posso classificar a saída du -h por tamanho

    • 30 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    binaryorganic Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada? 2010-10-26 08:45:39 +0800 CST
  • Martin Hope
    tobym O que exatamente significam as cores nas barras de status htop? 2010-09-14 12:22:43 +0800 CST
  • Martin Hope
    MikeN No Nginx, como posso reescrever todas as solicitações http para https mantendo o subdomínio? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 Qual é a diferença entre colchetes duplos e simples no bash? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt Como funciona a sub-rede IPv4? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve