2010-02-27 11:13:48 +0000 2010-02-27 11:13:48 +0000
90
90

Como copiar um ficheiro em unix sem alterar o seu último tempo modificado?

Se copiar um ficheiro de um local para outro usando cp, o carimbo de data/hora no ficheiro copiado é definido para a hora da cópia.

_ Existe alguma forma de evitar isto?_

Preciso de copiar ficheiros sem alterar os seus carimbos de data/hora.

Respostas (4)

106
106
106
2010-02-27 11:20:21 +0000

cp -p faz o truque. Para Linux :

-p o mesmo que --preserve=mode,ownership,timestamps Para FreeBSD :

& > -p Porque cp para preservar os seguintes atributos de cada ficheiro fonte na cópia: tempo de modificação, tempo de acesso, bandeiras de ficheiro, modo de ficheiro, ACL, ID de utilizador, e ID de grupo, conforme permitido pelas permissões.

E para OS X :

& > -p Porque cp para preservar os seguintes atributos de cada ficheiro fonte na cópia: hora de modificação, hora de acesso, bandeiras de ficheiro, modo de ficheiro, ID de utilizador, e ID de grupo, conforme permitido pelas permissões. Listas de Controlo de Acesso (ACLs) e Atributos Alargados (EAs), incluindo garfos de recursos, também serão preservados.

Note que isto pode/virá alterar o tempo de acesso (atime) do ficheiro de origem, como mostrado por ls -lu. Além disso, stat ou stat -x pode ser usado para mostrar bem os tempos de acesso aos dados, modificação de dados, e alteração do estado do ficheiro, aos quais para macOS o tempo de nascimento pode ser adicionado usando formatação explícita :

stat -f "%n%N%nAccess (atime): %Sa%nModify (mtime): %Sm%nChange (ctime): %Sc%nBirth (Btime): %SB%n" *
16
16
16
2015-06-09 15:45:17 +0000

Ao utilizar cp do GNU Coreutils , para preservar apenas os carimbos temporais e não atributos tais como user id, group id ou modo de ficheiro, existe o longhand --preserve que permite especificar explicitamente uma lista de atributos a serem preservados.

cp --preserve=timestamps source destination

Esteja ciente de que esta sintaxe provavelmente não é suportada por outros Unices. Uma alternativa poderia ser utilizar o parâmetro --times de rsync, que deveria estar disponível na maioria das instalações.

11
11
11
2010-02-27 11:23:37 +0000

Há três vezes num sistema de ficheiros Unix, o tempo de acesso (atime), o tempo de modificação (mtime), e o tempo de mudança de inode (ctime). Pode-se 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

Contudo, não se pode alterar o tempo de alteração do inode.

0
0
0
2013-07-21 16:57:14 +0000

Recentemente, precisei de fazer algo semelhante, mas usando em vez disso o symlink. Para criar um symlink e preservar o timestamp orignal: cp -ps src_file dst_symlink