【问题标题】:How to touch files with different names and different date created如何触摸具有不同名称和不同创建日期的文件
【发布时间】:2020-11-23 07:09:08
【问题描述】:

我正在尝试创建具有不同创建日期的文件:

$ touch -t 20{11..15}01120000 file_{1..5}.txt
$ ls -al 
-rw-r--r--   1 shinokada  staff     0 Jan 12  2011 201201120000
-rw-r--r--   1 shinokada  staff     0 Jan 12  2011 201301120000
-rw-r--r--   1 shinokada  staff     0 Jan 12  2011 201401120000
-rw-r--r--   1 shinokada  staff     0 Jan 12  2011 201501120000
-rw-r--r--   1 shinokada  staff     0 Jan 12  2011 file_1.txt
-rw-r--r--   1 shinokada  staff     0 Jan 12  2011 file_2.txt
-rw-r--r--   1 shinokada  staff     0 Jan 12  2011 file_3.txt
-rw-r--r--   1 shinokada  staff     0 Jan 12  2011 file_4.txt
-rw-r--r--   1 shinokada  staff     0 Jan 12  2011 file_5.txt

如您所见,创建的所有文件日期均为 2011 年 1 月 12 日 0。

如何创建不同年份的文件?

# this is what I want
-rw-r--r--   1 shinokada  staff     0 Jan 12  2011 file_1.txt
-rw-r--r--   1 shinokada  staff     0 Jan 12  2012 file_2.txt
-rw-r--r--   1 shinokada  staff     0 Jan 12  2013 file_3.txt
-rw-r--r--   1 shinokada  staff     0 Jan 12  2014 file_4.txt
-rw-r--r--   1 shinokada  staff     0 Jan 12  2015 file_5.txt

最好的方法是什么?

【问题讨论】:

  • man touchtouch 命令不仅可以让你创建一个文件,还可以给它一个伪造的修改时间戳。

标签: bash shell terminal touch


【解决方案1】:

简短,但将 filenumbersyears 保留为单独的变量

我认为这更具可读性,但是...

关心时区!

filenum=1
for year in {2011..2015};do
    TZ=UTC touch -t ${year}12312345 file-$((filenum++))
  done

然后,如果你看看这个,使用不同的时区: (注意创建日期是Dec 31, 23h45'

TZ=UTC-1 ls -ltr
-rw-r--r-- 1 user user      0 jan  1  2012 file-1
-rw-r--r-- 1 user user      0 jan  1  2013 file-2
-rw-r--r-- 1 user user      0 jan  1  2014 file-3
-rw-r--r-- 1 user user      0 jan  1  2015 file-4
-rw-r--r-- 1 user user      0 jan  1  2016 file-5

【讨论】:

    【解决方案2】:

    touch 命令允许您使用-t 选项输入一对一的时间戳。

    传统的 for 循环会更好:

    for i in {1..5}; do touch -t 201${i}01120000 file_$i.txt; done
    

    【讨论】:

    • 谢谢。我也只是使用 while-loop 来解决这个问题。
    【解决方案3】:

    请您尝试以下方法,我将采用 for 循环的以下方法。我在哪里提供年份,需要的文件数量,输出文件的初始值和所有输出文件的相同时间值,以便我们可以在 for 循环中对其进行管理。

    cat script.bash
    year=2011
    numberoffiles="10"
    time="01120000"
    outputfileInitials="file"
    nameSequence="1"
    
    for ((i = 1 ; i <= numberoffiles ; i++ ));
    do
      touch -t $year$time "${outputfileInitials}_$nameSequence.txt"
      (( nameSequence =  nameSequence + 1 ))
      (( year = year + 1 ))
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 2017-11-28
      相关资源
      最近更新 更多