Isso porque "src / *" não é avaliado (expandido em uma lista de arquivos) pelo cp, mas pelo shell antes de invocar o cp.
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?
Isso porque "src / *" não é avaliado (expandido em uma lista de arquivos) pelo cp, mas pelo shell antes de invocar o cp.
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 ).