Visualizzare data di ultima modifica

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
anycolouryoulike
Packager
Packager
Messaggi: 1158
Iscritto il: ven 10 ago 2007, 0:00
Slackware: 12.2
Kernel: 2.6.34.8
Desktop: KDE 3.5.10

Visualizzare data di ultima modifica

Messaggio da anycolouryoulike »

C'è un modo per visualizzarla in formato %Y%m%d del tipo:

Codice: Seleziona tutto

$ comando file
20081228
Grazie

Avatar utente
slux
Linux 3.x
Linux 3.x
Messaggi: 789
Iscritto il: dom 20 mar 2005, 0:00
Nome Cognome: Andrea Amerini
Slackware: 14.1 x86
Kernel: 3.12.0-smp
Desktop: xfce 4.10
Località: Prato
Contatta:

Re: Visualizzare data di ultima modifica

Messaggio 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

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: Visualizzare data di ultima modifica

Messaggio 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;
}

Avatar utente
raffaele181188
Packager
Packager
Messaggi: 789
Iscritto il: ven 7 set 2007, 21:40
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu
Località: DearSkin (FG)

Re: Visualizzare data di ultima modifica

Messaggio 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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Visualizzare data di ultima modifica

Messaggio 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}'

Avatar utente
slux
Linux 3.x
Linux 3.x
Messaggi: 789
Iscritto il: dom 20 mar 2005, 0:00
Nome Cognome: Andrea Amerini
Slackware: 14.1 x86
Kernel: 3.12.0-smp
Desktop: xfce 4.10
Località: Prato
Contatta:

Re: Visualizzare data di ultima modifica

Messaggio da slux »

Con GNU ls(1):

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

Avatar utente
anycolouryoulike
Packager
Packager
Messaggi: 1158
Iscritto il: ven 10 ago 2007, 0:00
Slackware: 12.2
Kernel: 2.6.34.8
Desktop: KDE 3.5.10

Re: Visualizzare data di ultima modifica

Messaggio da anycolouryoulike »

Credo che userò il metodo di Mario Vanoni, ma studierò anche quel codice.
Grazie a tutti!

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Visualizzare data di ultima modifica

Messaggio 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)!

Avatar utente
sya54M
Master
Master
Messaggi: 1665
Iscritto il: mer 6 giu 2007, 14:44
Nome Cognome: Andrea Peluso
Slackware: 64-current
Kernel: ultimo
Desktop: KDE
Località: (Salerno)
Contatta:

Re: Visualizzare data di ultima modifica

Messaggio 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

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Visualizzare data di ultima modifica

Messaggio 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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Visualizzare data di ultima modifica

Messaggio 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!

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Visualizzare data di ultima modifica

Messaggio 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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Visualizzare data di ultima modifica

Messaggio 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

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Visualizzare data di ultima modifica

Messaggio 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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Visualizzare data di ultima modifica

Messaggio 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`?

Rispondi