Зміна атрибутів файлу "Дата створення" та "Остання зміна" на інші файли


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атрибути 's до 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, підключену до Thecus N12000 NAS (використовує модифіковану версію CentOS 5.x).

Я зміг торкнутися файлу, як я згадував вище, і він працював так, як я описав. Проблема, ймовірно, є проблемою з будь-якими використовуваними параметрами монтажу, які можуть відмовитись відслідковувати певні часові атрибути, або, можливо, пов’язано з одним із цих помилок:


@JishnuUNair - чи можете ви перевірити, як монтується акція Samba (за допомогою яких варіантів)? Зазвичай ви можете отримати їх з mountкоманди, а потім шукати доступ, до якого ви отримуєте доступ. Лише здогадка, але це, ймовірно, монтується, використовує gvfs як файльну систему FUSE.
slm

1
Зараз багато файлових систем підтримують час створення файлів. Для ext4 ви можете його переглядати / змінювати debugfs(хоча для цього потрібні привілеї root і тут немає ніякої користі). Дивіться це запитання - unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4
Graeme

@Graeme - так, я просто посилався на подібний метод, використовуючи stap: unix.stackexchange.com/questions/91197/… у чаті.
slm

1
Хоча Linux не підтримує час створення, поділитися Samba можна. Залежно від того, як ви його налаштували (та підтримку xattr у файловій системі), Samba має можливість зберігати певні часові позначки в Linux xattrs. Це означає, що може бути в змозі зробити те, що базова файлова система не може - як повідомити про дійсний (модифікований) час створення. На жаль, я не знайшов хороших посилань на те, як це працює.
Петро

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

36

Найпростіший спосіб - модифікований доступ буде однаковим:

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....
Jadeye

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