O que você está pedindo é impossível usando a maioria dos sistemas de arquivos disponíveis nos sistemas GNU / Linux. Isso se deve ao fato de que os sistemas de arquivos levarão os tempos de modificação e de criação para a mesma coisa.
O que você pode fazer, no entanto, é salvar primeiro o timestamp (s) do arquivo que irá substituir e depois aplicar o timestamp (s) novamente. Isso vai realizar quase o que você gostaria de ver acontecer, ou seja. os tempos de criação que são iguais aos tempos de modificação, seriam salvos na operação de substituição de conteúdo.
Para o exemplo a seguir funcionar, você precisa de um statutils GNU (geralmente disponível e instalado em qualquer distribuição GNU / Linux) stat (1).
#!/bin/sh
s='stat --format="%y" "$2"'
cp "$1" "$2"
touch --date="$s" --time=mtime "$2"
Coloque isso em um arquivo em algum lugar, por exemplo /usr/local/bin/specialcp
.
Apenas para dar um exemplo sobre algumas das outras respostas, veja o que acontece quando você substitui o conteúdo do arquivo usando >
:
user@host:~/work/j$ touch --date="Sun, 29 Feb 2004 16:21:42 -0800" j
user@host:~/work/j$ stat j
File: 'j'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 807h/2055d Inode: 528815 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1001/ user) Gid: ( 1001/ user)
Access: 2004-03-01 02:21:42.000000000 +0200
Modify: 2004-03-01 02:21:42.000000000 +0200
Change: 2014-04-26 12:28:51.257855694 +0300
Birth: -
user@host:~/work/j$ cat /etc/profile > j
user@host:~/work/j$ stat j
File: 'j'
Size: 665 Blocks: 8 IO Block: 4096 regular file
Device: 807h/2055d Inode: 528815 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1001/ user) Gid: ( 1001/ user)
Access: 2004-03-01 02:21:42.000000000 +0200
Modify: 2014-04-26 12:28:58.814855890 +0300
Change: 2014-04-26 12:28:58.814855890 +0300
Birth: -
O tempo de modificação foi atualizado. Mas, com stat (1), você pode salvar a hora da modificação, substituir seu conteúdo / cp (1) / whatever e depois substituir o timestamp (s) mais tarde pelo touch (1).
E acontece o mesmo ao usar rsync
como sugerido em uma das outras respostas:
user@host:~/work/j$ touch --date="Sun, 29 Feb 2004 16:21:42 -0800" j
user@host:~/work/j$ stat j
File: 'j'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 807h/2055d Inode: 528815 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1001/ user) Gid: ( 1001/ user)
Access: 2004-03-01 02:21:42.000000000 +0200
Modify: 2004-03-01 02:21:42.000000000 +0200
Change: 2014-04-26 12:35:11.515865554 +0300
Birth: -
user@host:~/work/j$ rsync -a /etc/profile j
user@host:~/work/j$ stat j
File: 'j'
Size: 665 Blocks: 8 IO Block: 4096 regular file
Device: 807h/2055d Inode: 530708 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1001/ user) Gid: ( 1001/ user)
Access: 2014-04-26 12:35:19.198865753 +0300
Modify: 2014-02-08 08:59:51.000000000 +0200
Change: 2014-04-26 12:35:19.198865753 +0300
Birth: -