cp - não sobrescreve no makefile

4

No makefile do meu projeto, eu quero copiar um arquivo de configuração somente se o arquivo ainda não existir na pasta de destino. No momento estou usando:

cp -n

No entanto, recentemente alguém me disse que está recebendo um erro de "opção inválida".

Minha pergunta é: para um makefile, existe um método mais compatível para isso do que cp -n?

(Nota: cp -u não é o que eu quero, se o arquivo já existir, ele nunca deve ser substituído mesmo que seja mais antigo que o arquivo de origem.)

    
por SlappyTheFish 11.07.2011 / 17:41

3 respostas

2

Que tal:

#!/bin/bash
if ! [ -e /path/to/foo ]
then
    cp foo /path/to/
fi

Melhor ainda, se for, por exemplo um arquivo de configuração que pode ter novas opções úteis que você poderia:

#!/bin/bash
if ! [ -e /path/to/foo ]
then
    cp foo /path/to/
else
    cp -f foo /path/to/foo.new
fi

para que eles ainda tenham uma cópia à qual possam se referir.

    
por 11.07.2011 / 17:47
2

Eu acho que os seus comandos do seu Makefile vão ser apenas bash? Se assim for, você pode tentar usar o bash se condicional que depende se o arquivo existe:

if [ -f $FILE ];
then
   #echo "File $FILE exists"
else
   #echo "File $FILE does not exists"
   cp $SRC_FILE $FILE
fi

O código Bash daqui .

Caso você descubra que o Makefile está sendo executado em ambientes em que seu conteúdo não é avaliado em relação ao bash, você pode usar rsync (deve ser instalado na maioria das máquinas unixy) para a operação de cópia. Embora eu tenha olhado pela página do manual e não tenha visto uma bandeira para copiar apenas se o dest não existir - mas eu ainda acho que deve ser acomodado pelo rsync, só tenho que encontrar a bandeira pretendida para usá-lo. / p>     

por 11.07.2011 / 17:47
1

Eu tive o mesmo problema em um Makefile. Estranho "cp -n" funcionou no mesmo shell. Seria interessante saber por quê?!

Esta é a minha solução, um pouco mais curta do que se fosse então

test -e folder/requirements.txt || cp -p ../requirements.txt folder/requirements.txt
    
por 03.12.2014 / 10:03

Tags