#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