Como copiar o arquivo inteiro da linha de comando sem alterar o tempo de criação do destino

0

Eu quero copiar o conteúdo de um arquivo para outro arquivo sem substituir o arquivo de destino. Porque eu preciso manter o tempo de criação do arquivo de destino.

Tudo bem se o tempo de modificação for alterado.

Como posso fazer isso?

    
por ravibhuva9955 25.04.2014 / 12:28

3 respostas

1

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: - 
    
por 26.04.2014 / 11:36
3

Não use cp então. Use

cat file.xxx > alreadyexistingFile.yyy

Isso substituirá o conteúdo do arquivo, alterando o horário da modificação, mas não o tempo de criação.

    
por 25.04.2014 / 13:43
3

A maioria dos sistemas de arquivos não rastreia o tempo de criação de arquivos. ctime registra a hora da última mudança, não a criação. Há também atime (hora do último acesso) e mtime (hora da última modificação).

o ctime não pode ser controlado, mas o mtime pode. Observe que o mtime é listado quando você executa ls -l . Uma maneira de alterar o mtime é:

touch -m -t 201402011030 filename
    
por 25.04.2014 / 15:33

Tags