Listare la data di ultima modifica dei file in bash

Un pò di esperimenti che mostrano come listare i file presenti in una directory evidenziando fattori importanti come la data di ultima modifica.

Chiunque abbia a che fare con linux prima o poi fa uno script in bash. Di seguito elenco alcuni comandi che offrono informazioni importanti e "comode" nel senso che sono pronte per il riutilizzo all'interno di script.

Quando si vogliono processare esclusivamente le sotto-directory presenti in una directory (ci saranno almeno 2 milioni di modi per fare questa cosa … cmq) posso usare: la cosa comada in questo caso è che non vengono listate le directory "." e "..":

cd dir
find * -type d -prune

questo è il risultato che ottengo:

ACER
Acronis
caldaie
eurotrasporti
vaio

allo stesso modo posso listare solamente i files:

find -H * -type f -prune

e ottengo qualcosa di questo tipo:

2v_lista_ultime_modifiche
3053_I.pdf
75_beton.odt
75_beton.odt.ods
8500.ppd
ACER/PIC_0009.JPG
ACER/PIC_0016.JPG
ACER/PIC_0007.JPG
ACER/PIC_0012.JPG
ACER/PIC_0004.JPG
Acronis/TrueImageServerEcho_d_it.i686

Posso sfruttare questo comando per ottenere la lista dei file e la data di ultima modifica:

#!/bin/bash

t=0
OFS=$IFS
IFS='
'
for file in $(find -H * -type f -prune);
do 
        if [ "$1" == "complete" ];
        then
                #files[$t]=$(date --iso-8601=seconds -r `echo $file|sed 's/ /\\ /g'`)"\t$file";
                files[$t]=$(date +'%Y-%m-%d %H:%M:%S' -r `echo $file|sed 's/ /\\ /g'`)"\t$file";
        else
                files[$t]=$(date --rfc-3339='date' -r `echo $file|sed 's/ /\\ /g'`)"\t$file";
        fi
        t=$(( t + 1))
done

files_sorted=( 
                $(for ((i=0; i < "${#files[@]}"; i++)); 
                do 
                        echo ${files[$i]}; 
                done | sort) )

for ((i=0; i < "${#files[@]}"; i++)); 
do 
        echo -e ${files[$i]}; 
done

questo è il risultato che ottengo se lo lancio senza parametro

./2v_lista_ultime_modifiche
2008-10-17    2v_lista_ultime_modifiche
2007-09-17    3053_I.pdf
2007-12-17    75_beton.odt
2007-12-06    75_beton.odt.ods
2007-06-15    8500.ppd
2007-12-14    ACER/PIC_0009.JPG
2007-12-14    ACER/PIC_0016.JPG
2007-12-14    ACER/PIC_0007.JPG
2007-12-14    ACER/PIC_0012.JPG
2007-12-14    ACER/PIC_0004.JPG
2008-05-12    Acronis/TrueImageServerEcho_d_it.i686

questo è il risultato che ottengo se lo lancio con il parametro complete che mostra la data aggiungendo l'ora

 ./2v_lista_ultime_modifiche complete
2008-10-17 17:12:57    2v_lista_ultime_modifiche
2007-09-17 11:55:37    3053_I.pdf
2007-12-17 18:09:09    75_beton.odt
2007-12-06 18:35:31    75_beton.odt.ods
2007-06-15 19:15:36    8500.ppd
2007-12-14 11:54:30    ACER/PIC_0009.JPG
2007-12-14 11:54:56    ACER/PIC_0016.JPG
2007-12-14 11:54:14    ACER/PIC_0007.JPG
2007-12-14 11:54:42    ACER/PIC_0012.JPG
2007-12-14 10:50:43    ACER/PIC_0004.JPG
2008-05-12 12:46:32    Acronis/TrueImageServerEcho_d_it.i686

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Indirizzi web o e-mail vengono trasformati in link automaticamente
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Linee e paragrafi vanno a capo automaticamente.

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Questa domanda serve per verificare che tu sia un visitatore umano (non un computer) e per prevenire lo spam
4 + 2 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.