cp -Tr sobrescrever comportamento

0

Estou usando o GNU coreutils

Eu tenho um diretório foo contendo um arquivo file1 e um diretório bar contendo file2 .

Se eu fizer um cp -rT foo bar , a barra conterá os dois arquivos, em vez de ser sobrescrita, como a manpage pode levar você a acreditar.

Eu gostaria que o 'bar' apenas contivesse o conteúdo de 'foo' e não fosse mesclado.

    
por Philippe 13.09.2018 / 13:17

1 resposta

0

Com o GNU cp , a opção -T é usada para garantir que o diretório de origem não seja colocado dentro do diretório de destino. Não fará com que o conteúdo do diretório de destino seja removido.

A documentação informativa sobre isso ( info '(coreutils)Target directory' ) diz (está usando mv como exemplo):

-T

--no-target-directory

Do not treat the last operand specially when it is a directory or a symbolic link to a directory. This can help avoid race conditions in programs that operate in a shared area. For example, when the command mv /tmp/source /tmp/dest succeeds, there is no guarantee that /tmp/source was renamed to /tmp/dest: it could have been renamed to /tmp/dest/source instead, if some other process created /tmp/dest as a directory. However, if mv -T /tmp/source /tmp/dest succeeds, there is no question that /tmp/source was renamed to /tmp/dest.

Observe que mv -T source dest falhará se dest não estiver vazio.

Para substituir o conteúdo de bar pelo de foo no seu exemplo, use

rm -rf bar
cp -r foo bar

ou

rsync --archive --delete foo/ bar
    
por 13.09.2018 / 14:18

Tags