Cambiar los atributos "Fecha de creación" y "Última modificación" de un archivo a los de otro archivo

40

Estoy usando merge cap para crear un archivo pcap merge de 15 archivos. Para el archivo combinado, he cambiado el nombre al primero de los 15 archivos. Pero también me gustaría cambiar los atributos del archivo combinado como "Fecha de creación" y "Última modificación" a los del primero. ¿Hay alguna forma de hacer esto?

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

Intento acceder a los archivos combinados a través de un servidor samba (Ubuntu). Para que una función extractora pueda acceder a extraer automáticamente los archivos a la carpeta D. Pero como la fecha de creación se cambiará para el archivo combinado, la extracción falla. ¿Hay alguna forma de arreglar esto?

Jishnu U Nair
fuente

Respuestas:

77

Puede usar el touchcomando junto con el -rinterruptor para aplicar los atributos de otro archivo a un archivo.

NOTA: No existe una fecha de creación en Unix, solo hay acceso, modificación y cambio. Vea este Q&A de preguntas y respuestas titulado: obtenga la edad del archivo dado para obtener más detalles.

$ touch -r goldenfile newfile

Ejemplo

Por ejemplo, aquí hay un goldenfileque fue creado con alguna marca de tiempo arbitraria.

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

Ahora hago un nuevo archivo:

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

Ahora aplique goldenfilelos 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

Ahora newfiletiene los mismos atributos.

Modificar a través de Samba

Acabo de confirmar que puedo hacer esto usando mi computadora portátil Fedora 19 que incluye la versión 1.16.3-2 conectada a un NAS Thecus N12000 (usa una versión modificada de CentOS 5.x).

Pude tocar un archivo como mencioné anteriormente y funcionó como lo describí. Es probable que su problema sea un problema con las opciones de montaje que se utilizan, que pueden estar omitiendo el seguimiento de ciertos atributos de tiempo, o tal vez esté relacionado con uno de estos errores:

slm
fuente
@JishnuUNair: ¿puede verificar para ver cómo se está montando el recurso compartido Samba (con qué opciones)? Por lo general, puede obtenerlos del mountcomando y luego buscar el recurso compartido al que está accediendo. Solo una suposición, pero es probable que esté montado, use gvfs como un sistema de archivos FUSE.
slm
1
Muchos sistemas de archivos ahora admiten un tiempo de creación de archivos. Para ext4, puede verlo / cambiarlo debugfs(aunque esto necesita privilegios de root y no sirve de nada aquí). Vea esta pregunta: unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4
Graeme
@Graeme: sí, acabo de hacer referencia a un método similar usando stap : unix.stackexchange.com/questions/91197/… en la sala de chat.
slm
1
Si bien Linux no admite un tiempo de creación, un recurso compartido de Samba puede. Dependiendo de cómo lo configure (y soporte de xattr en el sistema de archivos), Samba tiene la capacidad de almacenar algunas marcas de tiempo en xattrs de Linux. Eso significa que puede hacer cosas que el sistema de archivos subyacente no puede, como informar un tiempo de creación válido (modificable). Lo siento, no encontré ningún buen enlace sobre cómo funciona esto.
Peter
1
En realidad, la mayoría de los sistemas de archivos de Linux (por ejemplo, ext4) ahora admiten la fecha de creación, y Linux 4.11 tendrá una statx()llamada para recuperarlo. Finalmente.
Jez
36

La forma más fácil: el acceso modificado será el mismo:

touch -a -m -t 201512180130.09 fileName.ext

Dónde:

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

Si desea utilizar NOWsimplemente suelte tla marca de tiempo y

Para verificar que todos son iguales: stat fileName.ext

Ver: tocar hombre

Jadeye
fuente
55
De alguna manera en ubuntu 14.04 poner -aantes -mno modifica el tiempo de acceso ... ponerlo después, así:touch -m -a -t....
Jadeye
55
-d time_stringquizás más fácil que -t: -d "2004-02-29 16:21:42"
yurenchen