![文件的随机修改时间](https://linux22.com/image/851697/%E6%96%87%E4%BB%B6%E7%9A%84%E9%9A%8F%E6%9C%BA%E4%BF%AE%E6%94%B9%E6%97%B6%E9%97%B4.png)
我查了一下网络,了解了如何更改文件的修改时间,但之后它们的修改时间却相同,这不是我愿意的,我想要随机的时间,这样更安全,谁能告诉我怎么做?
答案1
第一个挑战是生成一个随机日期。以下是我想到的办法。
date -d @$(shuf -i "0-$(date +%s)" -n 1) +%Y%m%d%H%M.%S
从内到外进行工作:
date +%s
获取当前日期作为 Unix 时间字符串(自 1970 年起,以 Epoc 为单位的秒数)shuf
使用它作为从 0 开始的随机数的上限date
将其转换回我们可以使用的东西。
然后是设置文件的修改时间。touch
幸好真的简单的:
touch -mt <[[CC]YY]MMDDhhmm[.ss]> <filename>
所以我们只需要循环文件并将这两个链接在一起:
find -type f -exec sh -c 'touch -m -t $(date -d @$(shuf -i "0-$(date +%s)" -n 1) +%Y%m%d%H%M.%S) "{}"' \;
有一些填充可以阻止在循环外随机生成日期,但这确实有效:
$ ls -l
total 0
-rw-rw-r-- 1 oli oli 0 Jan 4 2012 1
-rw-rw-r-- 1 oli oli 0 Jan 28 2009 2
-rw-rw-r-- 1 oli oli 0 Jun 8 1984 3
答案2
如果有人遇到这种情况,这个命令可以帮我设置从 1970 年 1 月 1 日到去年 12 月 28 日的随机日期:
touch -m -t $(date -d "$((RANDOM%$(($(date +"%Y") - 1970 - 1))+1970))-$((RANDOM%12+1))-$((RANDOM%28+1)) $((RANDOM%23+1)):$((RANDOM%59+1)):$((RANDOM%59+1))" '+%Y-%m-%d %H:%M:%S')
它并不完美(不会生成高于 28 或今年的日期的日期),但对于大多数情况来说应该足够好了。
灵感来自https://www.linuxquestions.org/questions/linux-newbie-8/random-date-generator-784598/