2015-03-24 2 views
1

Я хочу создать каталог, и если уже существует каталог, обновите его mtime.Как создать или обновить mtime в каталоге с помощью Ruby

Это то, что я писал:

Dir.exist?(dir) ? FileUtils.touch(dir) : FileUtils.mkdir_p(dir) 

Есть ли лучший способ, чтобы включить его?

+2

Не является ли 'FileUtils.touch (dir)' достаточным? [FileUtils :: touch] (http://ruby-doc.org/stdlib-2.2.0/libdoc/fileutils/rdoc/FileUtils.html#method-c-touch): «Время модификации обновлений (mtime) и время доступа (atime) файла (ов) в списке. Файлы создаются, если они не существуют. " –

+0

Документы приводят этот пример для 'mkdir_p':' FileUtils.mkdir_p '/ usr/local/lib/ruby'', который будет создавать родителей по мере необходимости. Я не думаю, что вы можете сделать это с помощью 'touch', но (после тестирования)' touch', похоже, отлично работает для создания одного каталога. Я еще не использовал 'touch', поэтому не знаю о создании родителей за один шаг. –

+0

Документы для touch говорят, что это влияет только на mtime и atime, а не на ctime. Также он создавал бы обычный файл, а не каталог. – stark

ответ

1

ctime не может быть обновлен, так как это создание время (*). См. here за то, что POSIX говорит об этом. Если вы действительно, действительно хотите установить ctime, переместите исходную директорию в сторону, создайте новую (этот шаг устанавливает ctime), переместите все исходное содержимое в новое, удалите старый.

Ваш код должен быть прав для обновления mtime (модификация времени).


(*) Или, скорее, в зависимости от операционной системы и файловой системы, она может, если взломать на него, но на самом деле, действительно не должен.

+0

ой, извините. Я перепутал 'mtime' и' ctime'. (Я думал, что «ctime» - это «измененное время».) – ironsand

Смежные вопросы