Linux 如何在多个文件中跨多个年份和12个日历月运行时间戳?

Linux 如何在多个文件中跨多个年份和12个日历月运行时间戳?,linux,bash,shell,unix,sh,Linux,Bash,Shell,Unix,Sh,我想创建一个包含以下文件的目录: test1 test2 test3…test4X;其中X是小于20的任意数 我正在尝试使用touch命令更新文件的时间戳(日期/时间),并使时间戳跨多个年份和12个日历月运行 #!/bin/bash clear touch -d 2011-01-01 file{1..10} ls -lt Output: -rw-r--r-- 1 Domain Users 0 Jan 1 2011 file10 -rw-r--r-- 1 Domain Users 0 J

我想创建一个包含以下文件的目录:

test1 test2 test3…test4X;其中X是小于20的任意数

我正在尝试使用
touch
命令更新文件的时间戳(日期/时间),并使时间戳跨多个年份和12个日历月运行

#!/bin/bash
clear
touch -d 2011-01-01 file{1..10}
ls -lt

Output:
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file10
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file1
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file2
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file3
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file4
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file5
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file6
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file7
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file8
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file9
示例:
test1
将于2011年1月发布<代码>测试2将于2014年2月发布;等等

下面是我的脚本,但我无法将时间戳随机分配到多个年份和12个日历月

#!/bin/bash
clear
touch -d 2011-01-01 file{1..10}
ls -lt

Output:
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file10
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file1
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file2
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file3
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file4
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file5
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file6
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file7
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file8
-rw-r--r-- 1 Domain Users  0 Jan  1  2011 file9

不确定您的完整要求,但如果您希望将开始年份的值设置为所需的结束年份值(直到您希望获得文件的修改时间),也可以将月份设置为相同的值,那么以下内容可能会对您有所帮助

awk -v var=19 -v start_year="2011" -v end_year="2015" -v start_month="1" -v end_month="12" '
BEGIN{
  while((4 * var)>val){
     print "touch -d " start_year"-"start_month"-1 file"++val;
     if(start_year==end_year){
       start_year="2011"
}
  if(start_month==end_month){
     start_month="1"
}
  start_year++;
  start_month++
}
}'

上述代码仅打印命令,例如-->
touch-d 2013-1-1文件75,因此,打印它们,一旦您对结果感到满意,然后在命令的最后使用
|sh
,该命令将执行这些
触摸
命令。

您遇到问题的地方是使用序列表达式创建
文件{1..10}
。虽然这很好,但是如果不为每个文件名创建多个日期变体,则不能使用另一个序列表达式来操纵
touch
的日期字符串

在这里,可以使用循环(或者简单地使用
RANDOM
,或者两者都使用)来操作日期字符串,从而为您提供多个年份和月份的日期戳

例如,要创建
file\u 1--file\u 10
,从
2007
2016
的年份和一个随机月份(
1-12月)
),您可以执行类似于我在评论中发布的操作,例如

for i in {2007..2016}; do   ## for years 2007 - 2016
    ## create a file with a random month
    touch -d "${i}-$((RANDOM % 12 + 1))-01" file_$((i-2006))
done
示例使用/输出

$ ls -lrt
total 0
-rw-r--r-- 1 david david 0 Mar  1  2007 file_1
-rw-r--r-- 1 david david 0 Dec  1  2008 file_2
-rw-r--r-- 1 david david 0 Oct  1  2009 file_3
-rw-r--r-- 1 david david 0 Mar  1  2010 file_4
-rw-r--r-- 1 david david 0 Jan  1  2011 file_5
-rw-r--r-- 1 david david 0 Aug  1  2012 file_6
-rw-r--r-- 1 david david 0 Mar  1  2013 file_7
-rw-r--r-- 1 david david 0 Mar  1  2014 file_8
-rw-r--r-- 1 david david 0 Jul  1  2015 file_9
-rw-r--r-- 1 david david 0 Dec  1  2016 file_10

仔细检查一下,如果您还有其他问题,请告诉我。

月{0..11};做在{2007..2016}为i完成
;dotouch-d“${i}-01-01”文件_$((i-2006));在{2007..2016}中为i完成
或随机月份
;dotouch-d“${i}-$(随机%12+1))-01”文件_$((i-2006));完成
@David.thank you..2006-2017年期间需要创建100个文件和时间戳的情况如何?非常感谢您的反馈。我会做
year=2006;对于{1..100}中的i;如果((i%10==0)),则执行该操作;然后((年++);fi;触摸-d“${year}-$(随机%12+1))-01”文件_$i;完成
只需添加一个变量
year
,并每10次迭代增加
year