cp e mv se o arquivo já existir

1

O que acontece quando você dá os seguintes comandos se o arquivo chamado já existe?

$ cp to_do done
$ mv to_do done
    
por user63626 26.03.2014 / 12:17

2 respostas

6

done será substituído pelo conteúdo de to_do

Você pode verificar com um teste simples:

$ echo a > done
$ echo b > to_do
$ cp to_do done 
$ cat done
b

e

$ echo a > done
$ echo b > to_do
$ mv to_do done
$ cat done
b

Editar

Após os comentários, algumas informações adicionais

  • done não será substituído se done ou to_do forem diretórios. Se done for um diretório, o arquivo to_do será movido / copiado no diretório. Se to_do for um diretório, você receberá uma mensagem de erro
  • usando a opção -i , você pode instruir mv e cp a avisar ao sobrescrever um arquivo
  • em algumas distribuições cp e mv são um alias para cp -i e mv -i (especialmente para o usuário raiz)
por 26.03.2014 / 12:19
5

Supondo que estamos falando de arquivos regulares aqui, no caso de:

cp to_do done

Se done não for gravável, você receberá uma mensagem de erro. Caso contrário, o conteúdo de to_do será copiado sobre done . O que isso significa é que done mantém o mesmo inode, permissões, propriedade, hora de nascimento. O -p (ou -a em algumas implementações) tentaria copiar alguns dos atributos de to_do .

Com:

cp -f to_do done

Se você não tiver acesso de gravação a done , cp primeiro desvinculará done (o que você poderá fazer contanto que tenha acesso de gravação ao diretório atual e à corrente O diretório não tem o t bit set) e cria um novo. cp tentará copiar tantos atributos de to_do , como seria se done não existisse de antemão.

com

mv to_do done

to_do acabou de ser renomeado. É apenas o diretório atual que é modificado. Se done já existia antes, ele será desvinculado primeiro.

    
por 26.03.2014 / 13:30

Tags