Questa è una richiesta insolita. Non sono sicuro del perché vorresti farlo ma ha suscitato il mio interesse. Utilizzeremo jot
per scegliere un numero casuale compreso tra 1 e 16000.
jot -r 1 1 16000
Questo sarà il numero di ore che sottraiamo dalla data corrente.
seed=$(jot -r 1 1 16000)
date -v-"$seed"H "+%Y%m%d%H%M.%S"
Tieni presente che date
sopra, formatta la data da utilizzare con il tocco.
Ora usiamo find
per elencare tutte le directory all'interno della directory di lavoro corrente e usare uno script "in linea" per toccare tutti gli oggetti del filesystem all'interno di ogni directory con un tempo di modifica univoco in ciascuna directory.
find . ! -name '.' -type d -exec bash -c ' for dir
do
seed=$(jot -r 1 1 16000)
echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}/"*
done
' sh {} \;
Non abbiamo ancora finito perché abbiamo modificato indiscriminatamente i tempi di modifica delle directory annidate. Vogliamo orari mod unici per ogni directory.
find . ! -name '.' -type d -exec bash -c ' for dir
do
seed=$(jot -r 1 1 16000)
echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}"
done
' sh {} \;
E per mettere tutto insieme -
#! /bin/ksh
find . ! -name '.' -type d -exec bash -c ' for dir
do
seed=$(jot -r 1 1 16000)
echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}/"*
done
' sh {} \;
find . ! -name '.' -type d -exec bash -c ' for dir
do
seed=$(jot -r 1 1 16000)
echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}"
done
' sh {} \;
Questo script potrebbe fallire se superi ARG_MAX e al momento elencherà solo le modifiche che potrebbero toccare. Puoi rimuovere echo
davanti a touch
per apportare le modifiche. Si prega di essere consapevoli del fatto che questo script ha solo un test limitato e viene offerto COSÌ COM'È.