
Estou usando 2 máquinas, que são ambasRed Hat Enterprise Linux AS versão 3 (Atualização Taroon 2) (Eu verifico em /etc/*-release ).
Verifiquei que eles estão usando o mesmo shell padrão ps -p $$
, que é bash.
Tentei executar um comando find com padrão curinga: find path -name pattern -type f -ctime +3
e o padrão contém o caractere * como curinga.
A primeira máquina parece expandir o caractere curinga e causar erro:
find /home/primbat/testing -name sftp_bcs_report_*.log -type f -ctime +7
find: paths must precede expression
e preciso fazer o padrão entre 2 qoute delimitados, por exemplo: \"sftp_bcs_report_*.log\"
ou usar set -f
no script para suprimir a expansão de curinga.
Que na outra máquina não tem esse problema. Você tem alguma ideia?
Responder1
Por padrão, os shells expandem os curingas se um arquivo corresponder a eles, mas permanecem não expandidos sem correspondência. Por exemplo, se você executar touch /tmp/111; touch /tmp/11*
isso criará e atualizará o mtime em /tmp/111, mas se /tmp estiver vazio, mas você chamar, touch /tmp/11*
você obterá um arquivo chamado "11*" em /tmp.
Esta é uma característica bastante estranha dos shells. Às vezes, a expansão adequada não é possível sem hacks especiais como função intermediária. A maioria dos shells atuais inventa opções especiais para casos típicos; por exemplo, "shopt -s failglob" no bash rejeita a execução de qualquer comando onde a correspondência de curinga falha.
Deve-se confiar na expansão do curinga do find, portanto, tal padrão deve ser citado em relação à expansão no shell:
find /home/primbat/testing -name 'sftp_bcs_report_*.log' -type f -ctime +7
(observe aspas simples). Com zero ou um arquivo funciona, mas com dois ou mais arquivos você obtém uma sintaxe de comando quebrada e ele reclama - é o que diz o colegaArcegé. Seu "set -f" desativa totalmente a expansão - bem, é uma boa medida para diagnóstico, mas pode fornecer ancinhos subaquáticos para uma movimentação futura. As citações são mais simples :)
Responder2
Parece que não há nenhum arquivo correspondente sftp_bcs_report_*.log
no diretório inicial da segunda máquina e mais de um arquivo no primeiro servidor. Para usar find
, os padrões devem sempre ser citados.