Linux 如何在多个文件中跨多个年份和12个日历月运行时间戳?
我想创建一个包含以下文件的目录: test1 test2 test3…test4X;其中X是小于20的任意数 我正在尝试使用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
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
。