Как я устанавливаю mtime файла в формате эпохи?

1. Нет никакой потребности определить деревья каталогов индивидуально:

Плохой путь:

~ $ mkdir tmp
~ $ cd tmp
~/tmp $ mkdir a
~/tmp $ cd a
~/tmp/a $ mkdir b
~/tmp/a $ cd b
~/tmp/a/b/ $ mkdir c
~/tmp/a/b/ $ cd c
~/tmp/a/b/c $

Хороший путь:

~ $ mkdir -p tmp/a/b/c

2. Архивация:

Иногда я видел, что люди перемещают любой tar как a.tar к другому каталогу, который, оказывается, каталог, где они хотят извлечь архив. Но это не нужно, поскольку-C опция может использоваться здесь для определения каталога с этой целью.

~ $ tar xvf -C tmp/a/b/c newarc.tar.gz

3. Важность операторов управления:

Предположим, что существует две команды, но только если первая команда работает, затем второй должен работать, иначе вторая команда ни за чем не работала бы. Так, здесь команда должна быть выполнена, только если другая команда возвращает нулевой статус выхода.

Пример:

~ $ cd tmp/a/b/c && tar xvf ~/archive.tar

В вышеупомянутом примере содержание архива должно быть извлечено в каталоге: c, но только если каталог существует. Если каталог не существует, команда tar не работает, таким образом, ничто не извлечено.

11
28.06.2014, 18:57
3 ответа

По крайней мере, в мире GNU:

touch --date=@1403970787 file

как с датой .

.
10
27.01.2020, 19:59

С помощью perl:

$ perl -e 'utime (stat($_))[8], time(), $_ for @ARGV' file1 file2 ...

Это изменит mtime всех файлов в @ARGV. (stat($_))[8] это время файла.

utime может получить список файлов, если вас не волнует изменение времени, вы можете попробовать:

 $ perl -e '$t = time(); utime $t, $t, @ARGV' file1 file2 ...

Примечание

utime зависит от библиотеки времени исполнения C и используемой файловой системы. подробнее смотрите в perldoc -f utime и perldoc perlport.

.
1
27.01.2020, 19:59

С помощью команды touch от GNU coreutils (т.е. на не встраиваемых Linux и Cygwin) смотрите полное руководство (обычно доступно в локальном информационном формате) для документирования форматов ввода даты . Даты эпохи обозначаются префиксом @:

touch -d @1234567890 foo

Это также работает с BusyBox (по крайней мере, на некоторых системах, это может зависеть от опций компиляции).

С помощью *BSD, я не думаю, что вы можете сделать это только с помощью touch, но вы можете позвонить date, чтобы отформатировать время эпохи в формат, который touch принимает.

touch -d "$(date -r 1234567890 +%Y%m%d%H%M.%S)" foo

POSIX, как известно, не имеет возможности манипулировать датами эпохи. Вы можете использовать perl.

0
27.01.2020, 19:59

Теги

Похожие вопросы