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:
- Fecha del último acceso -
atime
- Fecha de última modificación -
mtime
- 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:
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
yreplit.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.