Alterar os atributos "Data de criação" e "Última modificação" de um arquivo para

40

Estou usando o merge cap para criar um arquivo pcap de mesclagem de 15 arquivos. Para o arquivo mesclado, alterei o nome para o primeiro dos 15 arquivos. Mas também gostaria de alterar os atributos do arquivo mesclado, como "Data de criação" e "Última modificação" para os do primeiro. Há alguma maneira de fazer isso?

FILES_dcn=($(find  $dir_dcn -maxdepth 1 -type f -name "*.pcap"  -print0 | xargs -0 ls -lt | tail -15 | awk '{print $9}'))
TAG1_dcn=$(basename "${FILES_dcn[14]}" | sed 's/.pcap//')
mergecap -w  "${dir_dcn}"/merge_dcn.pcap "${FILES_dcn[@]}"
mv  "${dir_dcn}"/merge_dcn.pcap  "${dir_dcn}"/"${TAG1_dcn}".pcap

Eu tento acessar os arquivos mesclados em um servidor samba (Ubuntu). Para que uma função extrator possa acessar, extraia automaticamente os arquivos na pasta D. Mas como a data criada será alterada para o arquivo mesclado, a extração falhará. Existe alguma maneira de corrigir isso?

Jishnu U Nair
fonte

Respostas:

77

Você pode usar o touchcomando junto com a -ropção para aplicar os atributos de outro arquivo a um arquivo.

NOTA: Não existe data de criação no Unix, existem apenas acesso, modificação e alteração. Veja as perguntas e respostas da U&L intituladas: obtenha a idade do arquivo especificado para obter mais detalhes.

$ touch -r goldenfile newfile

Exemplo

Por exemplo, aqui está um goldenfileque foi criado com algum carimbo de data e hora arbitrário.

$ touch -d 20120101 goldenfile
$ ls -l goldenfile 
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 goldenfile

Agora eu faço um novo arquivo:

$ touch newfile
$ ls -l newfile 
-rw-rw-r--. 1 saml saml 0 Mar  7 09:06 newfile

Agora aplique goldenfileos atributos de newfile.

$ touch -r goldenfile newfile 
$ ls -l goldenfile newfile
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 newfile
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 goldenfile

Agora newfiletem os mesmos atributos.

Modificar via Samba

Acabei de confirmar que sou capaz de fazer isso usando meu laptop Fedora 19, que inclui a versão 1.16.3-2 conectada a um NAS Thecus N12000 (usa uma versão modificada do CentOS 5.x).

Consegui tocar em um arquivo como mencionei acima e funcionou como eu descrevi. Seu problema provavelmente é um problema com as opções de montagem que estão sendo usadas, o que pode estar omitindo o rastreamento de determinados atributos de tempo ou talvez esteja relacionado a um desses erros:

slm
fonte
@JishnuUNair - você pode verificar se o compartilhamento do Samba está sendo montado (com quais opções)? Normalmente, você pode obtê-los no mountcomando e procurar o compartilhamento que está acessando. Apenas um palpite, mas provavelmente está sendo montado, use gvfs como um sistema de arquivos FUSE.
Slm
1
Muitos sistemas de arquivos agora oferecem suporte a um horário de criação de arquivos. Para ext4, você pode visualizá-lo / alterá-lo debugfs(embora isso precise de privilégios de root e não seja útil aqui). Veja esta pergunta - unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4
Graeme
@ Graeme - sim, eu acabei de referenciar um método semelhante usando o stap: unix.stackexchange.com/questions/91197/… na sala de bate-papo.
slm
1
Enquanto o Linux não suporta um horário de criação, um compartilhamento Samba pode. Dependendo de como você o configurou (e o suporte ao xattr no sistema de arquivos), o Samba pode armazenar alguns registros de data e hora no xattrs do Linux. Isso significa que ele pode fazer coisas que o sistema de arquivos subjacente não pode - como relatar um horário de criação válido (modificável). Desculpe, não encontrei bons links para como isso funciona.
Peter
1
Atualmente, a maioria dos sistemas de arquivos Linux (por exemplo, ext4) agora suporta a data de criação, e o Linux 4.11 terá uma statx()chamada para recuperá-lo. Finalmente.
Jez
36

Maneira mais fácil - o acesso modificado será o mesmo:

touch -a -m -t 201512180130.09 fileName.ext

Onde:

-a = accessed
-m = modified
-t  = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format

Se você deseja usar, NOWbasta soltar to carimbo de data e hora

Para verificar se são todos iguais: stat fileName.ext

Veja: touch man

Jadeye
fonte
5
De alguma forma, no ubuntu 14.04, colocar -aantes -mnão modifica o tempo de acesso ... depois, então:touch -m -a -t....
Jadeye
5
-d time_stringtalvez mais fácil do que -t: -d "2004-02-29 16:21:42"
yurenchen 14/11