Esta es una petición inusual. No estoy seguro de por qué se quiere hacer esto, pero se despertó mi interés. Utilizaremos jot
a recogernos para un número al azar entre 1 y 16000.
jot -r 1 1 16000
Este será el número de horas que le restan a partir 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
por encima de, los formatos de la fecha de trabajar con el tacto.
Ahora vamos a utilizar find
listar todos los directorios dentro del directorio de trabajo actual y el uso de una "inline" secuencia de comandos para tocar todos los objetos del sistema de archivos dentro de cada directorio con una modificación única vez 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 todavía, porque tenemos indiscriminadamente a los cambios de la modificación de directorios anidados. Queremos único mod veces 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 puede fallar si se excede ARG_MAX y en la actualidad solamente una lista de los cambios que toque. Usted puede quitar el echo
frente a touch
para realizar los cambios. Por favor, ser conscientes de que esta secuencia de comandos sólo se ha limitado a pruebas y se ofrece COMO es.