Как коснуться файлов с разными именами и разной датой создания

#bash #shell #terminal #touch

#bash #оболочка #терминал #коснитесь

Вопрос:

Я пытаюсь создать файлы с другой датой создания:

 $ 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 Jan 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
 

Каков наилучший способ?

Комментарии:

1. См . man touch . Эта touch команда позволяет не только создать файл, но и присвоить ему поддельную временную метку модификации.

Ответ №1:

touch команда позволяет вам ввести одну временную метку, используя -t опцию.

Традиционный цикл for был бы лучше:

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

Комментарии:

1. Спасибо. Я просто выясняю это, используя цикл while.

Ответ №2:

Коротко, но сохраняя номера файлов и годы в качестве отдельных переменных

Я думаю, что это более читабельно, но…

Заботьтесь о часовом поясе!

 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
 

Ответ №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