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

dotmap: 

Commenti

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Indirizzi web o e-mail vengono trasformati in link automaticamente
  • Elementi HTML permessi: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Linee e paragrafi vanno a capo automaticamente.
  • Internal paths in double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or relative path.

Ulteriori 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
Image CAPTCHA
Scrivi ció che vedi nella immagine.