Pagina 1 di 2

Visualizzare data di ultima modifica

Inviato: dom 28 dic 2008, 21:32
da anycolouryoulike
C'è un modo per visualizzarla in formato %Y%m%d del tipo:

Codice: Seleziona tutto

$ comando file
20081228
Grazie

Re: Visualizzare data di ultima modifica

Inviato: lun 29 dic 2008, 0:17
da slux
Un pò contorto, ma funziona. Se c'è di meglio non lo so.

Codice: Seleziona tutto

ls -l nome_file|cut -d " " -f 6 |sed s/-//g

Re: Visualizzare data di ultima modifica

Inviato: lun 29 dic 2008, 1:28
da Dani
Si puo' usare anche stat:

Codice: Seleziona tutto

stat -c %y file | cut -b -10
o magari farsi qualcosa appositamente da mettere in /usr/local

Codice: Seleziona tutto

#define _BSD_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <time.h>
#include <errno.h>
int main (int argc, char *argv[])
{
	struct stat st;
	struct tm *time;
	
	if (argc < 2)
	{
		printf ("Usage: %s [files]\n", *argv);
		exit (1);
	}
	
	++argv;
	
	do {
	
	if (lstat (*argv, &st))
	 printf ("%s: %s\n", *argv, strerror (errno));
	else
	{
		time = gmtime (&st.st_mtime);
		printf ("%d%.2d%.2d\n", time->tm_year + 1900, time->tm_mon + 1, time->tm_mday);
	}
	
	} while (*++argv);
	
	return 0;
}

Re: Visualizzare data di ultima modifica

Inviato: lun 29 dic 2008, 9:31
da raffaele181188
Ma non si era detto in un thread di qualche giorno fa che è possibile visualizzare il timestamp DELL'ULTIMO ACCESSO, ma non quello dell'ultima modifica? Mi sembrava di aver capito così... Anche perchè ci sono -atime e -ctime, ma non mi pare di aver trovato -mtime. Credevo fosse una limitazione di ext3, o magari di qualche comando come find o ls... Se è possibile visualizzare la data dell'ultima modifica (non dell'ultimo accesso, eh) vi prego di postare come, perchè mi servirebbe per un semplice script bash. Grazie

Re: Visualizzare data di ultima modifica

Inviato: lun 29 dic 2008, 10:16
da Mario Vanoni
anycolouryoulike ha scritto:C'è un modo per visualizzarla in formato %Y%m%d del tipo:

Codice: Seleziona tutto

$ comando file
20081228
Grazie
Con GNU ls(1):

ls -l --time-style=+%Y%m%d file_name | awk '{print $6}'

Re: Visualizzare data di ultima modifica

Inviato: lun 29 dic 2008, 19:05
da slux
Con GNU ls(1):

ls -l --time-style=+%Y%m%d file_name | awk '{print $6}'
Molto più elegante,senza dubbio =D>

Re: Visualizzare data di ultima modifica

Inviato: lun 29 dic 2008, 19:53
da anycolouryoulike
Credo che userò il metodo di Mario Vanoni, ma studierò anche quel codice.
Grazie a tutti!

Re: Visualizzare data di ultima modifica

Inviato: lun 29 dic 2008, 20:09
da Mario Vanoni
Alternativa:

ls -l --time-style=+%Y%m%d file_name | cut -d ' ' -f 6

ma ricorda che non e` portabile su U*X senza GNU ls(1)!

Re: Visualizzare data di ultima modifica

Inviato: lun 29 dic 2008, 21:49
da sya54M
raffaele181188 ha scritto:Ma non si era detto in un thread di qualche giorno fa che è possibile visualizzare il timestamp DELL'ULTIMO ACCESSO, ma non quello dell'ultima modifica? Mi sembrava di aver capito così... Anche perchè ci sono -atime e -ctime, ma non mi pare di aver trovato -mtime. Credevo fosse una limitazione di ext3, o magari di qualche comando come find o ls... Se è possibile visualizzare la data dell'ultima modifica (non dell'ultimo accesso, eh) vi prego di postare come, perchè mi servirebbe per un semplice script bash. Grazie
se è la stessa discussione che ricordo io si parlava della data di creazione che infatti non si può conoscere

Re: Visualizzare data di ultima modifica

Inviato: mar 30 dic 2008, 11:10
da conraid
Io in uno script ho usato questo metodo

Codice: Seleziona tutto

DATAFILE=$(date --date="$(stat -c %y $NOMEFILE)" +%Y%m%d)
è più veloce dei comandi con ls (che prima usavo) in pipe sia con cut sia con awk
Se devi farlo per tanti file conta, altrimenti meglio l'altro metodo in quanto più portabile, questa sfrutta una caratteristica della bash di annidare i comandi esterni, cioè fare con $(comando) quel che normalmente si fa con `comando`.
`comando `comando2`` non si può fare

Re: Visualizzare data di ultima modifica

Inviato: mar 30 dic 2008, 22:27
da Mario Vanoni
Directory con 8200 files *.c

time ls -l --time-style=+%Y%m%d file_name | awk '{print $6}'
0m0.128s

$(date --date="$(stat -c %y /directory/*.c)" +%Y%m%d)
arg list too long

mettendolo sia in un

ls /directory/*.c | while read file

che in un

for file in /directory/*.c

time dice 0m22...24, secondi !!!

PS La versione con cut non funziona
se il numero di bytes dei files sono diversi,
cut -d ' ' non capisce 1 o piu` spazi, awk si!

Re: Visualizzare data di ultima modifica

Inviato: mer 31 dic 2008, 11:00
da conraid
Mario Vanoni ha scritto:Directory con 8200 files *.c
E' inutile paragonare fagioli con mele, sono cose diverse che mangi in costesti diversi

Re: Visualizzare data di ultima modifica

Inviato: mer 31 dic 2008, 11:40
da Mario Vanoni
conraid ha scritto:
Mario Vanoni ha scritto:Directory con 8200 files *.c
E' inutile paragonare fagioli con mele, sono cose diverse che mangi in contesti diversi
Directory con 15 files *.c

ls + awk = 0m0.008s

for + bash = 0m0.047s

Re: Visualizzare data di ultima modifica

Inviato: mer 31 dic 2008, 11:44
da conraid
Mario Vanoni ha scritto:
conraid ha scritto:
Mario Vanoni ha scritto:Directory con 8200 files *.c
E' inutile paragonare fagioli con mele, sono cose diverse che mangi in contesti diversi
Directory con 15 files *.c

ls + awk = 0m0.008s

for + bash = 0m0.047s
continui a paragonare cose diverse da fare in contesti diversi.

se usi for per processari più file ed assegnare la data ad una variabile (altrimenti il tutto non ha senso, e non ha senso nemmeno che usi quel comando per fare le prove), allora la stessa cosa va fatta anche con ls
altrimenti sono "cose diverse in contesti diversi"

E "for" l'hai usato tu, io ho detto altro su un altro contesto

Re: Visualizzare data di ultima modifica

Inviato: mer 31 dic 2008, 15:00
da Mario Vanoni
conraid ha scritto:
Mario Vanoni ha scritto: Directory con 15 files *.c

ls + awk = 0m0.008s

for + bash = 0m0.047s
continui a paragonare cose diverse da fare in contesti diversi.

se usi for per processari più file ed assegnare la data ad una variabile (altrimenti il tutto non ha senso, e non ha senso nemmeno che usi quel comando per fare le prove), allora la stessa cosa va fatta anche con ls
altrimenti sono "cose diverse in contesti diversi"

E "for" l'hai usato tu, io ho detto altro su un altro contesto
Corrado, per favore spiegati meglio.

La domanda di anycolouryoulike 28.12.2008 21:32:
voleva YYYYMMDD per ogni file.

Il tuo post 30.12.2008 11:10 dava una soluzione in uno script per un file,
se sono di piu`, non rimane che un for o while.

time ls -l --time-style=+%Y%m%d un_file_name | awk '{print $6}'
0m0.002s

time echo "$(date --date="$(stat -c %y un_file_name" +%Y%m%d)"
0m0.002s

time /bin/echo "$(date --date="$(stat -c %y un_file_name" +%Y%m%d)"
0m0.010s

Quale criterio usi per giudicare la velocita`?