cp lançado a partir dos resultados de código não pode stat '/ tmp / somedir' funciona no shell

3

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.

    
por Ronnyek 11.11.2011 / 18:11

3 respostas

3

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.

    
por 11.11.2011 / 18:20
3

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!

    
por 01.12.2011 / 00:58
1

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 .

    
por 11.11.2011 / 23:44

Tags