Linux поменять дату создания файла

Не меняется дата создания у файла

Есть файловый сервер на котором выделили шару, на нем необходимо поменять дату создания файла на более позднюю. Например, на 2017 год. Так вот, проблема в том, что эта дата автоматически сбрасывается в текущую дату, хотя дата последнего доступа и дата последний записи успешно меняется. На локальном компьютере, где стоит Windows 7 все успешно меняется, на сервере под Windows 2003 все успешно меняется по шаре, а на сторонней шаре не менятся. Даже пробовал файл 2017 года кидать на шару, так все равно сбрасывалась дата до 2016. Дату пытаюсь менять самопальной программой. Гугл молчит. Подскажите, в чем может быть проблема? Может это какая-то политика безопасности или может быть целевой сервер вообще не под управлением Windows? UPD Дата создания все таки меняется, но только в прошлое. Т.е 2013 год я спокойно могу поставить, а 2017 сбросится до 2016.

1 ответ 1

Согласно стандарту POSIX (а, по всей видимости, сервер обслуживается вариантом OS UNIX), в структуре дескриптора файла должны присутствовать следующие поля, связанные с временем:

struct stat /* структура, возвращаемая stat */ < . . . time_t st_atime; /* время последнего чтения из файла */ time_t st_mtime; /* время последней записи в файл */ time_t st_ctime; /* время последнего изменения файла или индексного дескриптора */ >; 

Как видите, никакого времени СОЗДАНИЯ файла здесь нет. И это — совершенно правильно. Что бы в этом убедиться, подумайте вот над каким вопросом: Вы переименовали файл А (может быть — переслали его в другой каталог) именем В. Что есть дата СОЗДАНИЯ файла В? У Вас есть внятный ответ на этот вопрос? Такого ответа никто пока не придумал 🙂 А то, что в Windows называется датой СОЗДАНИЯ файла — оставим это на совести Билла Гейтса 🙂

Читайте также:  Linux ssh authentication failed

Источник

Массово изменить дату создания файлов

Есть ли какой-то пакетный обработчик файлов, который бы проставил дату создания файла равной дате изменения файла, которая соответствует дате и времени съемки.

–preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,time‐ stamps), if possible additional attributes: context, links, xattr, all

SpaceRanger ★★ ( 11.05.22 23:00:40 MSK )
Последнее исправление: SpaceRanger 11.05.22 23:01:18 MSK (всего исправлений: 1)

Не пойдет, так как файлы уже скопированы, а оригиналы с карт памяти удалены

Да, это называется «скрипт-однострочник на bash».

Тоже в этом направлении думаю

Нужно в каталоге последовательно читать время изменения файла и через touch устанавливать время создания?

Ух ты, первый раз вижу кого-то кто интересуется содержанием какого-либо таймстапма файла кроме даты модификации. Ещё много какой софт, думаю, забивает на atime/ctime/birthtime.

firkax ★★★★ ( 12.05.22 02:17:21 MSK )
Последнее исправление: firkax 12.05.22 02:17:54 MSK (всего исправлений: 1)

digiKam считает, что фото двухлетней давности отсняты вчера. Отсюда и интерес к дате создания

Для пакетного изменения экзифа есть exiftool. Примеры в гугле в изобилии.

Не на всякой файловой системе хранится время создания файла.

Проблема не в EXIF. С ним как раз все нормально.

Вот пример кадра с камеры, скопированного на диск

$ stat ~/Test/IMG_3379.CR2 Файл: /home/max/Test/IMG_3379.CR2 Размер: 24955660 Блоков: 48744 Блок В/В: 4096 обычный файл Устройство: 0/44 Инода: 255026 Ссылки: 1 Доступ: (0644/-rw-r--r--) Uid: ( 1000/ maxim) Gid: ( 1000/ max) Доступ: 2021-09-13 04:00:00.000000000 +0400 Модифицирован: 2019-10-24 20:56:26.000000000 +0400 Изменён: 2022-05-12 22:41:04.006824106 +0400 Создан: 2022-05-12 22:41:04.006824106 +0400 

Если я его добавляю в альбом через digiKam, то digiKam считает, что фото снято сегодня, а не в октябре 2019 года

Копирование файлов между разными FS может привести к подобному, к сожалению

Источник

Как я могу изменить время создания всех файлов папки на текущее время?

В оболочке Linux, как я могу изменить время создания всех файлов папки на текущее время?

3 ответа 3

Перейдите к рассматриваемой папке, скажем, ~/Documents/myfiles.

Это изменит время модификации, когда вы выполняете эту команду.

Очевидно, вы можете сделать это более конкретным в зависимости от вашего варианта использования, например,

Читайте также:  Astra linux common edition документация

только изменит время модификации для файлов со строкой ‘.doc’ в их имени.

В Linux, если вы хотите сделать что-то рекурсивное в каталоге, или вы хотите применить некоторые действия к файлам, отвечающим некоторым критериям, вам следует попробовать find и xargs

Нажмите на все файлы в ~/Documents/myfiles (включая файлы в подкаталоге)

find ~/Documents/myfiles -type f -print0 | xargs -0 touch 

ОП запросил время создания, но ответы Яна Янга и Боэджа основаны на touch команды, устанавливающей время модификации, доступа и изменения текущего времени.

Как boehj сказал (в комментарии) нет времени создания файла . Это верно для большинства файловых систем, но в некоторых современных файловых системах (например, ext4) время создания (или рождения) файла хранится в inode.

Поэтому мы можем дать более правильный ответ, скрупулезно соблюдая заголовок вопроса:

cp -a your-folder tmp-folder rm -rf your-folder mv tmp-folder your-folder 

Это изменит время создания (время рождения ) на текущее время. Это также обновляет время изменения, но сохраняет неизменным время изменения и доступа .

Для информации время изменения иногда сокращается как ctime и может быть перепутано со временем создания ( crtime или btime ). Фактически время изменения файла — это время изменения его соответствующего inode. Поэтому команды, изменяющие содержимое inode как chmod или chattr также устанавливают время изменения на текущее время.

Источник

How can I change ‘change’ date of file?

You cannot change the ctime by ordinary means. This is by design: the ctime is always updated to the current when you change any of the file’s metadata, and there is no way to impose a different ctime. To change the ctime of a file, you need to do one of the following:

  • Set the system time to the ctime you want to impose, then touch the file, then reset the system time.
  • Modify the kernel to add an interface to change the ctime.
  • Access the disk image directly (e.g. with debugfs ) and twiddle the bits on the disk (don’t do it while the filesystem is mounted).
Читайте также:  Linux установить драйвер монитора

You have the answer on related SO question pointed by jw013, for extX, on unmounted disk :

# Update ctime debugfs -w -R 'set_inode_field /tmp/foo ctime 201001010101' /dev/sda1 # Drop vm cache so ctime update is reflected echo 2 > /proc/sys/vm/drop_caches 

$ NOW=$(date) && date -s «2030-08-15 21:30:11» && touch file.txt && date -s «$NOW»

The ctime of a file is updated when any of the metadata is changed.

$ ls -l x.py -rw-rw-r--. 1 ignacio ignacio 485 Mar 26 2010 x.py $ stat -c %z x.py 2010-03-26 11:57:56.237068175 -0400 $ chown ignacio x.py $ stat -c %z x.py 2012-04-08 15:31:33.682383575 -0400 $ ls -l x.py -rw-rw-r--. 1 ignacio ignacio 485 Mar 26 2010 x.py 

evandrix’s answer excerpted in the next line,
NOW=$(date) && date -s «2030-08-15 21:30:11» && touch file.txt && date -s «$NOW»
needs to be improved as described below :

In some systems like mine, date output doesn’t give a valid format to set with date -s

My system bash shell version : GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)
My system date command version : date (GNU coreutils) 8.30

My system date command output and setting the date with this format is:

# date Tue 21 Jan 2020 01:36:22 PM +03 # date -s "Tue 21 Jan 2020 01:36:22 PM +03" date: invalid date ‘Tue 21 Jan 2020 01:36:22 PM +03’ 

So it is necessary to improve evandrix answer;
It would be better to assign the NOW variable to the timestamp value
change NOW=$(date) to NOW=$(date +@%s)

 NOW=$(date +@%s) && date -s "2030-08-15 21:30:11" && \ touch file.txt && date -s "$NOW" 

Adding sudo command for non root user

 sudo bash -c 'NOW=$(date +@%s); date -s "2030-08-15 21:30:11"; touch file.txt; date -s "$NOW"' 
 sudo bash -c 'NOW=$(date +@%s); date -s "$2"; touch "$1"; date -s "$NOW"' -- \ "file.txt" "2030-08-15 21:30:11" 

In this way for easy use, the filename and setting date are assigned as arguments at the end of the line.

Источник

Оцените статью
Adblock
detector