Como copiar um arquivo no unix sem alterar o horário da última modificação?

89

Se eu copiar algum arquivo de um lugar para outro usando cp, o registro de data e hora no arquivo copiado será definido como o horário da cópia.

Existe alguma maneira de evitar isso?

Preciso copiar arquivos sem alterar os carimbos de data e hora.

lazer
fonte

Respostas:

103

cp -pfaz o truque. Para Linux :

-p igual a --preserve=mode,ownership,timestamps

Para o FreeBSD :

-p Faça com que o cp preserve os seguintes atributos de cada arquivo de origem na cópia: hora da modificação, hora do acesso, sinalizadores de arquivo, modo de arquivo, ACL, ID do usuário e ID do grupo, conforme permitido pelas permissões.

E para o OS X :

-pFaça com que o cp preserve os seguintes atributos de cada arquivo de origem na cópia: hora da modificação, hora do acesso, sinalizadores de arquivo, modo de arquivo, ID do usuário e ID do grupo, conforme permitido pelas permissões. As listas de controle de acesso (ACLs) e os atributos estendidos (EAs), incluindo bifurcações de recursos, também serão preservados.

Arjan
fonte
25
cp -a também é bom saber, implica não apenas -p, mas também -R para copiar diretórios inteiros e -d para preservar links.
casualuser 27/02
2
Observe que, ao usar o GNU Coreutils, cp -pnão apenas preserva o registro de data e hora, mas também o modo e a propriedade, e no FreeBSD, além do tempo de modificação, também preserva »tempo de acesso, sinalizadores de arquivo, modo de arquivo, ACL, ID do usuário e ID do grupo, conforme permitido por permissões. «e no OS X adicionalmente» Atributos estendidos, incluindo bifurcações de recursos «.
Stefan Schmidt
na mais recente OSX, cp -p ainda toca timestamp do arquivo de origem
afathman
15

Ao usar a cppartir do GNU Coreutils , para preservar apenas os carimbos de data e hora, e não os atributos como ID do usuário, ID do grupo ou modo de arquivo, existe um atalho --preserveque permite especificar explicitamente uma lista de atributos a serem preservados.

cp --preserve=timestamps source destination

Esteja ciente de que essa sintaxe provavelmente não é suportada em outros Unices. Uma alternativa poderia ser usar o --timesparâmetro rsyncque deve estar disponível na maioria das instalações.

Stefan Schmidt
fonte
4
Esta é a resposta correta. Usar -pnão é a resposta correta. -pmantém a propriedade e o modo também. O que pode não ser desejado .. e não foi perguntado.
bshea
10

Há três vezes em um sistema de arquivos Unix, o tempo de acesso (atime), o tempo de modificação (mtime) e o tempo de alteração do inode (ctime). Você pode alterar o tempo de acesso e o tempo de modificação com o programa de toque, por exemplo

cp orig copy
touch -r orig copy

No entanto, você não pode alterar o tempo de alteração do inode.

gorila
fonte
1
para o tempo de modificação do inode, ver também linux - Definir criação ou mudar timestamps - Stack Overflow
sdaau
0

Recentemente, eu precisava fazer algo semelhante, mas usando o link simbólico. Para criar um link simbólico e preservar o carimbo de data / hora original:cp -ps src_file dst_symlink

fduff
fonte
Como um comentário, isso pode ser útil para alguns leitores, pois, como resposta, adiciona ruído à maioria dos leitores.
Ndemou