Por que o cpio diz “ATENÇÃO! Esses nomes de arquivos não foram selecionados ”ao copiar um grande número de arquivos?

0

Por mais de 10 anos, tenho usado esta estratégia para copiar um grande número de arquivos entre sistemas de arquivos UNIX :

cd source_directory
find . -depth -print | cpio -pdm /path/to/destination_directory

Funciona como um campeão. No entanto, agora estou recebendo este erro do cpio:

cpio: WARNING! These file names were not selected:
(long list of files here...)

O diretório de origem está no OSX 10.5 e o diretório de destino é um sistema de arquivos NFS de um servidor OpenSolaris. Copiar através do NFS nunca foi um problema no passado. Não há nada de estranho nos nomes dos arquivos, o que significa que não há personagens especiais ou algo assim.

Alguma idéia?

    
por mmm bacon 06.03.2010 / 20:20

1 resposta

1

A hierarquia de diretórios de origem está sendo usada por algo enquanto você está fazendo a cópia? Consegui obter essa mensagem de erro (e algumas outras) quando dei nomes de caminho que não existem:

% ls foo bar baz
ls: bar: No such file or directory
ls: foo: No such file or directory
baz
!1% # Only baz exists.
!1% printf %s\\n foo bar baz | cpio -odm > /dev/null
cpio: Unable to access foo <No such file or directory>
cpio: Unable to access bar <No such file or directory>
cpio: WARNING! These file names were not selected:
foo
bar

Mas também recebo essas mensagens de erro explicativas anteriores. Talvez você esteja recebendo tantos desses últimos que você não pode ver o primeiro. Você poderia tentar salvar a saída com cmd 2> logfile para salvar a saída do stderr em um arquivo.

Você pode acabar nesta mesma situação se pelo menos um outro processo excluir um arquivo entre quando encontrar imprimir seus nomes de caminho e quando o cpio abrir para leitura. Esta é uma condição de corrida . A corrida é iniciada por find (quando lê o diretório, encontra um determinado nome de caminho (eventualmente imprimindo seu nome de caminho)) e os concorrentes são cpio (ganha quando abre com sucesso o pathname para leitura) e algum outro processo (ganha quando apaga o nome do caminho antes de cpio abrir).

    
por 06.03.2010 / 23:07