Изменение атрибутов «Дата создания» и «Дата последнего изменения» файла на другой файл


40

Я использую шапку слияния для создания файла слияния pcap из 15 файлов. Для объединенного файла я изменил имя на имя первого из 15 файлов. Но я также хотел бы изменить атрибуты объединенного файла, такие как «Дата создания» и «Последнее изменение», на атрибуты первого. Есть какой-либо способ сделать это?

FILES_dcn=($(find  $dir_dcn -maxdepth 1 -type f -name "*.pcap"  -print0 | xargs -0 ls -lt | tail -15 | awk '{print $9}'))
TAG1_dcn=$(basename "${FILES_dcn[14]}" | sed 's/.pcap//')
mergecap -w  "${dir_dcn}"/merge_dcn.pcap "${FILES_dcn[@]}"
mv  "${dir_dcn}"/merge_dcn.pcap  "${dir_dcn}"/"${TAG1_dcn}".pcap

Я пытаюсь получить доступ к объединенным файлам через сервер Samba (Ubuntu). Так что функция извлечения может получить доступ к автоматическому извлечению файлов в папку D. Но так как дата создания будет изменена для объединенного файла, извлечение завершится неудачно. Есть ли способ исправить это?

Ответы:


77

Вы можете использовать touchкоманду вместе с -rпереключателем, чтобы применить к файлу атрибуты другого файла.

ПРИМЕЧАНИЕ. В Unix нет такой вещи, как дата создания, есть только доступ, изменение и изменение. См. U & L Q & A под названием: получить возраст данного файла для получения дополнительной информации.

$ touch -r goldenfile newfile

пример

Для примера, вот goldenfileчто было создано с некоторой произвольной отметкой времени.

$ touch -d 20120101 goldenfile
$ ls -l goldenfile 
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 goldenfile

Теперь я делаю новый файл:

$ touch newfile
$ ls -l newfile 
-rw-rw-r--. 1 saml saml 0 Mar  7 09:06 newfile

Теперь примените goldenfileатрибуты к newfile.

$ touch -r goldenfile newfile 
$ ls -l goldenfile newfile
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 newfile
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 goldenfile

Теперь newfileимеет те же атрибуты.

Изменить через Samba

Я только что подтвердил, что могу сделать это, используя свой ноутбук Fedora 19, который включает в себя версию 1.16.3-2, подключенную к NAS от Thecus N12000 (используется модифицированная версия CentOS 5.x).

Я смог прикоснуться к файлу, как я упоминал выше, и он работал, как я описал. Ваша проблема, скорее всего, связана с используемыми опциями монтирования, в которых может отсутствовать отслеживание определенных временных атрибутов или, возможно, это связано с одной из следующих ошибок:


@JishnuUNair - вы можете проверить, как монтируется общий ресурс Samba (с какими опциями)? Обычно вы можете получить их из mountкоманды, а затем искать общий ресурс, к которому вы обращаетесь. Просто предположение, но, вероятно, он монтируется с использованием gvfs в качестве файловой системы FUSE.
SLM

1
Многие файловые системы теперь поддерживают время создания файла. Для ext4 вы можете просмотреть / изменить его через debugfs(хотя для этого нужны привилегии root и здесь нет смысла). См. Этот вопрос - unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4
Грэм

@Graeme - да, я только что сослался на похожий метод, используя stap : unix.stackexchange.com/questions/91197/… в чате.
SLM

1
Хотя Linux не поддерживает время создания, общий ресурс Samba может. В зависимости от того, как вы его настроили (и поддержки xattr в файловой системе), Samba может сохранять некоторые метки времени в Linux xattrs. Это означает, что он может делать вещи, которые не может лежать в базовой файловой системе, например, сообщать правильное (изменяемое) время создания. Извините, я не нашел хороших ссылок на то, как это работает.
Питер

1
На самом деле большинство файловых систем Linux (например, ext4) теперь поддерживают дату создания, и в Linux 4.11 будет statx()вызов для ее получения. В заключение.
Jez

37

Самый простой способ - доступ к модифицированному будет таким же:

touch -a -m -t 201512180130.09 fileName.ext

Где:

-a = accessed
-m = modified
-t  = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format

Если вы хотите использовать, NOWпросто опустите tи отметку времени

Чтобы убедиться, что они все одинаковы: stat fileName.ext

Смотрите: сенсорный человек


5
Каким-то образом на Ubuntu 14.04 установка -aдо -mне touch -m -a -t....
меняет

5
-d time_stringможет быть проще, чем -t: -d "2004-02-29 16:21:42"
yurenchen
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.