Como uso o 'cp' para substituir arquivos?

10

Usando um script de shell ou Terminal, como sobrescrevo arquivos que podem ou não estar presentes. Eu olhei para a página de manual do cp, que dizia usar o argumento -f para forçar a substituição. Mas, isso não faz nada.

$ cp -f /path/to/source/file.txt /path/to/target

Ou existe outra opção para substituir arquivos usando as ferramentas de linha de comando comuns incorporadas no OS X?

rogerFernand
fonte
3
Funciona para mim. O que está fazendo em vez de substituir quando você tenta?
Gordon Davisson
2
Se você não tiver permissão para substituir o arquivo de destino, isso falhará. Se você realmente deseja sobrescrever um arquivo de destino, pode usá-lo sudono início do comando. Mas use com cuidado!
Daniel
@Gordon Davisson: O que está fazendo? nada. Ele somente copiará os arquivos para o diretório de destino se mveles ou rmeles.
rogerFernand
@ Daniel Lawson: Sem usar sudo, posso usar mvou rmmover ou remover arquivos antes de usar cp. Usar sudo cpnão faz diferença.
rogerFernand
Curioso e curioso.
Daniel

Respostas:

14

Estou perplexo com o motivo pelo qual o cp está se comportando dessa maneira, se não houver um pseudônimo envolvido. No entanto, existe um utilitário de quick-sujo e perigoso prevista nesta situação exata: yes. Você pode usá-lo para canalizar um fluxo contínuo de afirmativas em qualquer comando que forneça prompts de confirmação (você pode usá-lo para enviar qualquer texto, mas o padrão é "y").

yes | cp foo bar executará o comando cp e ignorará todos os prompts de confirmação.

octern
fonte
8

Pode ser causado por um alias de comando.

Para ligar cpdiretamente, você pode usar/bin/cp src dest

Aji
fonte
1
Não sei por que isso foi prejudicado. Fiquei com a impressão de que especificar explicitamente -f substituiria -i no alias, mas verifiquei e não. O pôster deve descobrir se eles têm cp alias (tipo alias cp). Eles podem alterar o alias em seu perfil ou usar / bin / cp, conforme sugerido.
octern
Estou usando o padrão cpcomo a Apple forneceu.
rogerFernand
@octern:roger$ alias cp -bash: alias: cp: not found
rogerFernand
Eu tive que usar / bin / cp, não sei por quê.
beingalex
1
Talvez eu esteja muito atrasado, mas para as pessoas que vêm do mecanismo de pesquisa, pude ver se o comando tinha algum alias ao fazer isso type cp. E realmente aconteceu.
Grito #
2
rm foo/bar/destination && cp source foo/bar/destination

Primeiro você remove ( rm) o destino e, em seguida, se for bem-sucedido ( &&), copia. Ao remover uma pasta, lembre-se de adicionar -ra rm( rm -r).

vtoanb
fonte
1

Eu também tinha um apelido atrapalhando com -f, chamo o cp diretamente de / bin e está tudo bem, ter um apelido que evita substituições / remoções acidentais por padrão é muito bom, por isso é melhor não removê-lo.

. # alias

alias cp = 'cp -i'

como já foi dito, o sinalizador -i substitui -f, o que não permitiria que o comando abaixo funcionasse conforme o planejado.

. # / bin / cp -fauv src dst

Niklas Göransson
fonte