cp não copia novos arquivos de localização de origem (arquivos criados depois de disparar o comando cp)

2

Estou usando o seguinte comando para copiar o conteúdo de um diretório de origem para um diretório de destino:

cp src/* dest

No entanto, após evocar esse comando e, enquanto o conteúdo é copiado, se eu criar mais arquivos no diretório src, esses arquivos recém-criados não serão copiados para o diretório dest.

Por favor, você poderia explicar a razão por trás disso? O cp funciona em algo como fazer contas do conteúdo, enquanto o cp é disparado e, em seguida, copiar o conteúdo baseado nessa conta mantendo e, assim, ignorando o conteúdo recém-criado?

    
por BIBS 21.01.2012 / 10:03

2 respostas

4

Isso porque "src / *" não é avaliado (expandido em uma lista de arquivos) pelo cp, mas pelo shell antes de invocar o cp.

    
por 21.01.2012 / 10:09
1

Andreas está certo que src/* é expandido pelo shell. No entanto, mesmo se você não especificar o caractere curinga cp , ainda poderá ignorar os arquivos recém-criados, pois haverá uma condição de corrida entre o processo cp acessando o diretório e você (na verdade, o processo que cria arquivos em seu nome) modificando o diretório.

No que diz respeito à implementação do GNU cp , ele obtém uma lista das entradas do diretório antes da cópia real (consulte a função copy_dir aqui ).

    
por 21.01.2012 / 10:25

Tags