Esta es una solicitud inusual. No estoy seguro de por qué querría hacer esto pero despertó mi interés. Usaremos jot
para elegirnos un número aleatorio entre 1 y 16000.
jot -r 1 1 16000
Este será el número de horas que restaremos de la fecha actual.
seed=$(jot -r 1 1 16000)
date -v-"$seed"H "+%Y%m%d%H%M.%S"
Tenga en cuenta que date
arriba, formatea la fecha para trabajar con el toque.
Ahora usamos find
para enumerar todos los directorios dentro del directorio de trabajo actual y usamos un script "en línea" para tocar todos los objetos del sistema de archivos dentro de cada directorio con un tiempo de modificación único en cada directorio.
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 {} \;
Aún no hemos terminado porque cambiamos indiscriminadamente los tiempos de modificación de los directorios anidados. Queremos tiempos únicos de modificación para cada directorio.
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 {} \;
Y para ponerlo todo junto
#! /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 {} \;
Esta secuencia de comandos podría fallar si supera ARG_MAX y actualmente solo mostrará una lista de los cambios que tocaría. Puede eliminar echo
delante de touch
para realizar los cambios. Tenga en cuenta que este script solo tiene pruebas limitadas y se ofrece TAL CUAL.