A chamada no script em que você está tendo o problema não está agrupando os arquivos, mas sim o shell. Eu não estou muito claro sobre como você está chamando, mas você precisa encontrar uma maneira de glob ou loop sobre os arquivos.
Estou trabalhando para tornar alguns scripts mais elegantes implementando-os em um aplicativo x real, etc.
Em algum ponto dos scripts, basicamente queremos tirar tudo de um dispositivo de armazenamento removível montado e copiar para a pasta especificada em uma pasta de trabalho tmp. Ao executar no shell, ele funciona sem problemas. Quando executado a partir do código, ele falha.
Copiar comando:
cp -avfr /tmp/mnt221234jk/* /tmp/mnt23255/disk1/
e o erro que recebo do aplicativo nativo é:
cp: cannot stat: '/tmp/mnt221234jk/*' file not found.
A parte estranha é que está absolutamente lá, tem permissões apropriadas para o usuário executando o aplicativo, etc. Eu posso tanto stat /tmp/mnt221234jk/*
e executar o comando cp a partir do shell e ambos funcionam muito bem.
Além disso, se eu omitir o /*
da origem da cópia do arquivo, ele funcionará, mas criará uma nova pasta no destino com o nome mnt221234jk
, que não é o que estou procurando.
Algumas notas secundárias: meu código para executar comandos shell funciona absolutamente e funciona bem. Mas pode muito bem haver algo estranho em precisar de caminhos de trabalho ou algo assim.
A falha em determinar com base no erro de arquivo não existente toca qualquer coisa com alguém?
Eu estaria disposto a tentar alcançar isso de forma diferente se houvesse comandos shell alternativos para efetivamente copiar uma estrutura de arquivos recursivamente com permissões, etc.
A chamada no script em que você está tendo o problema não está agrupando os arquivos, mas sim o shell. Eu não estou muito claro sobre como você está chamando, mas você precisa encontrar uma maneira de glob ou loop sobre os arquivos.
Bem, eu peço desculpas antecipadamente, o problema real era na verdade bem simples ... era um problema com os arquivos globbing, mas não porque meu shell o desativou explicitamente, ou o caminho relativo.
Eu estava lançando "shell scripts" e comandos shell, mas fora do contexto de bash / sh / tcsh, etc. A execução de cp diretamente será problemática até onde isso ocorrer.
Executando
/bin/bash -c "cp /blah/* /someotherdir/"
funcionou fantasticamente. Aprecie as pistas!
Existe um erro no seu script. Não podemos dizer onde, porque você não mostrou seu roteiro.
Dada sua descrição limitada, parece que o shell não está expandindo /tmp/mnt221234jk/*
para uma lista de arquivos, mesmo que o comando cp
, que está sendo executado com os mesmos privilégios, possa atravessar o diretório. Portanto, uma explicação provável é que você desativou o globbing com set -f
ou set -o noglob
em algum momento. Volte a ligar com set +f
.