Obtener la fecha/hora de creación del archivo en Bash

Abdul Mateen 20 junio 2023
  1. Creación de archivos en Linux
  2. Obtener fecha/hora de creación de archivos en Linux
Obtener la fecha/hora de creación del archivo en Bash

Este tutorial nos enseñará cómo obtener la fecha/hora de creación del archivo en Bash. Comenzaremos nuestra discusión presentando brevemente la creación de archivos en sistemas más antiguos.

Más adelante aprenderemos la creación de archivos en Bash. Finalmente, discutiremos diferentes métodos para obtener la fecha/hora de creación de archivos en Bash.

Creación de archivos en Linux

Hay varios métodos para crear archivos en Linux. Podemos usar el shell o el administrador de archivos de escritorio para la creación de archivos.

Este artículo se centrará en la creación de un archivo en Bash mediante comandos de shell.

Uso del comando tocar

En Linux, el comando tocar está disponible para crear un nuevo archivo. La sintaxis del comando tocar es tocar nombre de archivo.

Para crear un archivo, asígnele el nombre ABC.XYZ; tenemos que escribir:

$ touch ABC.XYZ

Este comando creará un archivo vacío llamado ABC.XYZ. Podemos ejecutar el comando ls en el directorio actual para ver el archivo (si se creó).

Usando el comando gato

Podemos crear un nuevo archivo con la ayuda del comando cat. Podemos combinar las operaciones de redirección con tomar la entrada del usuario en un nuevo archivo.

El comando gato le pedirá al usuario que ingrese texto. Los usuarios pueden ingresar la tecla de retorno para pasar a la siguiente línea.

Para finalizar este comando, presione Ctrl+D; todo el texto introducido por el usuario se guardará en el archivo línea por línea. Ver ejemplo:

$ cat > my_file.txt
Welcome to Bash shell!
The text entered here will be written into a text file.
Ctrl+D

La última declaración no está escrita, sino una combinación de teclas presionada por el usuario para finalizar el comando. En respuesta, las siguientes 2 líneas se escribirán en el archivo de texto llamado mi_archivo.txt.

Uso del operador de redirección

Podemos crear un archivo en blanco usando solo el operador de redirección. Ingresar el operador de redirección seguido del nombre del archivo creará un archivo de texto en blanco.

Por ejemplo:

$ > my_file.txt

Puede volver a utilizar el comando ls para verificar la creación del archivo. También es posible que ya exista un archivo con el mismo nombre, en nuestro caso, mi_archivo.txt.

En este caso, el comando borrará el contenido anterior del archivo y aparecerá un archivo vacío con el nombre mi_archivo.txt.

Deberíamos verificar y confirmar que los contenidos anteriores estarán allí o se eliminarán. Utilice el comando cat para leer el contenido del archivo.

$ cat my_file.txt

Si nada está mal, como la ortografía del nombre del archivo, directorio, etc., entonces el archivo estará vacío.

Usando el comando eco

El comando echo toma una cadena como argumento y la muestra como salida. Por ejemplo:

$ echo "This is the first file"
This is the first file

Podemos escribir algunos contenidos después del comando echo y el operador de redirección para crear un nuevo archivo con los contenidos pasados. Nuevamente, en este caso, el comando eliminará el contenido anterior si el archivo ya existe.

Ver ejemplo:

$ echo "This is the First file" > firstFile.txt

El resultado de este comando echo creará un nuevo archivo, donde un archivo contendrá el texto pasado como argumento a echo. Estos son todos los métodos para crear archivos en Bash.

Para leer los detalles, haga clic en este sitio web.

Obtener fecha/hora de creación de archivos en Linux

Después de crear con éxito el archivo, nuestro siguiente paso es encontrar la fecha y la hora de creación del archivo. La mayoría de los sistemas más antiguos ejecutan versiones antiguas del sistema de archivos, que necesitan almacenar la fecha de creación del archivo.

Como los estándares POSIX solo han especificado 3 valores de marca de tiempo distintos almacenados para cada archivo, ya no es necesario que un sistema de archivos admita nada más allá de ellos, es decir, no hay tiempo de creación disponible.

Estas 3 marcas de tiempo almacenan información sobre:

  1. Fecha del último acceso - atime
  2. Fecha de última modificación - mtime
  3. Fecha del último cambio - ctime

Estos valores se devuelven en la estructura que tiene características de archivo denominadas struct stat. Los detalles relacionados se describen en el sitio web.

Sin embargo, los sistemas de archivos más nuevos (ext4, zfs, btrfs, JFS y XFS) almacenan la marca de tiempo de creación en campos separados:

  1. ext4crtime
  2. zfscrtime
  3. XFScrtime
  4. btrfsotime
  5. JFS - di_otime

Los campos anteriores almacenan datos en el archivo inode. Hay 3 formas diferentes de obtener la fecha/hora de creación del archivo en Bash.

El primero es muy básico (no técnico) y puede funcionar con sistemas operativos antiguos, mientras que los siguientes 2 son técnicos pero están disponibles en sistemas operativos avanzados/en versiones más nuevas únicamente.

Utilice el nombre de archivo

Como ya hemos discutido, el comando stat muestra 3 marcas de tiempo en sistemas operativos más antiguos, y no hay una marca de tiempo relacionada con la creación de archivos. Sin embargo, el usuario (creador del archivo) puede concatenar el tiempo de creación con el nombre del archivo, lo que será válido si no se modifica el nombre del archivo.

Por ejemplo:

touch data1_18_oct_2022_10_11_AM
touch data2_18_oct_2022_11_20_AM
...
ls -l

Producción :

-rwxrwxrwx 1 root  root   0 Oct 18 05:16 data1_18_oct_2022_10_11_AM
-rw-r--r-- 1 14079 14079  0 Oct 18 05:16 data2_18_oct_2022_11_20_AM
...
-rwxrwxrwx 1 root  root  69 Oct 18 05:16 main.bash

En la salida, la fecha y la hora de creación del archivo son visibles con el nombre del archivo (por lo general, las personas tienen nombres de archivo como datos1, datos2, etc.)

Usa el comando stat

El comando stat es sencillo para obtener la fecha/hora de creación del archivo. La versión anterior nos proporciona valores de sello de 3 veces.

Estos valores de marca de tiempo son la última vez que se accedió al archivo, la última vez que se modificaron los datos del archivo y la última vez que cambió el estado del archivo. Pero en las nuevas versiones del sistema operativo, también proporciona la hora de nacimiento/creación del archivo.

Comprobémoslo creando un nuevo archivo en Bash y obteniendo la fecha/hora.

touch f1
stat f1
touch f2
cat f2>f1
touch f1
stat f1

Producción :

Access: 2022-10-17 15:24:16.676971765 +0000
Modify: 2022-10-17 15:24:16.676971765 +0000
Change: 2022-10-17 15:24:16.676971765 +0000
 Birth: 2022-10-17 15:24:16.676971765 +0000

Access: 2022-10-17 15:24:16.684972083 +0000
Modify: 2022-10-17 15:24:16.684972083 +0000
Change: 2022-10-17 15:24:16.684972083 +0000
 Birth: 2022-10-17 15:24:16.676971765 +0000

En el código anterior, primero, creamos el archivo f1 usando el comando touch, luego verificamos su fecha/hora de creación usando el comando stat. Luego creamos otro archivo llamado f2.

Usando cat y >, agregamos el contenido de f2 al final de f1. Luego estamos nuevamente haciendo f1 y verificando su fecha/hora de creación.

Si observamos detenidamente el resultado, sabremos que nuestra fecha/hora de Acceso del archivo f1 y la fecha/hora de nacimiento del archivo f1 son las mismas, lo que significa que ambos archivos se crearon en la misma fecha/hora .

Nota: Hemos ejecutado el script en jdoodle.com y replit.com, ya que ambos admiten nuevas versiones del sistema operativo. También puede consultar los scripts en estos compiladores en línea.

Utilice el comando debugfs

El comando debugfs también está disponible en el sistema de archivos ext4; podemos encontrar la fecha de creación del archivo usando este comando. Tenga en cuenta que el propósito principal del comando debugfs es depurar sistemas de archivos; sin embargo, también podemos encontrar fechas de creación de archivos usando este comando.

En primer lugar, necesitamos el número de inodo de nuestro archivo, que podemos ver con el comando ls. La bandera -i hace que ls imprima los números de nodo de los archivos.

$ ls -i ./file
5118705 ./file

El df es el comando que podemos usar para abrir los sistemas de archivos.

~ $ df ./file
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             26046564   8380600  16338936  34% /

A continuación, pasaremos esta información al comando debugfs, y la sintaxis del mismo es debugfs -R' stat <inode>'/dev/sdX donde inode es nuestro archivo inode, y /dev/sdX es el sistema de archivos del archivo.

$ sudo debugfs -R 'stat <5118705>' /dev/sda2
debugfs 1.46.4 (18-Aug-2021)
Inode: 5118705   Type: regular    Mode:  0644   Flags: 0x80000
Generation: 2975709199    Version: 0x00000000:00000001
User:  1000   Group:  1000   Project:     0   Size: 8
File ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x61bc31c8:19fee850 -- Fri Oct 14 06:44:24 2022
atime: 0x61bc3224:7f8fe250 -- Fri Oct 14 06:45:56 2022
mtime: 0x61bc31c8:19fee850 -- Fri Oct 14 06:44:24 2022
crtime: 0x61bc2b65:71f8e150 -- Fri Oct 14 06:17:09 2022
Size of extra inode fields: 32
Inode checksum: 0x5ddd5b4b
EXTENTS:
(0):5279293

El campo crtime visible arriba tiene la hora de creación del archivo. La hora de creación del archivo, Viernes 14 de octubre 06:17:09 2022, es la fecha exacta en que se crea el archivo.

Sin embargo, tenga en cuenta que el campo ctime parece similar pero diferente. El tiempo contenido por el campo crtime es el último cambio de estado del archivo, como un cambio en los derechos de un archivo.

En este artículo, hemos descrito 3 formas de obtener la fecha y hora de creación del archivo. Depende de si el usuario tiene un sistema operativo más antiguo o más nuevo.

En el caso de la versión anterior, podemos adoptar la primera forma no técnica. De lo contrario, el segundo y tercer método están disponibles, donde la administración está dentro del sistema operativo.

Los usuarios pueden obtener la fecha y la hora de creación ejecutando los comandos correspondientes.

Artículo relacionado - Bash Date