Как изменить дату изменения/создания файла?

Как изменить дату изменения/создания файла?

Есть ли способ изменить дату, когда файл был изменен/создан (которая отображается в Nautilus или с помощью команды ls -l)? В идеале я ищу команду, которая может изменить отметки даты/времени целой группы файлов на определенное время раньше или позже (например, +8 часов или -4 дня и т. д.).

решение1

Если вы являетесь владельцем файла (или пользователем root), вы можете изменить время модификации файла с помощью touchкоманды:

touch filename

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

touch -d "2 hours ago" filename

Если вы хотите изменить файл относительно его текущего времени модификации, выполните следующие действия:

touch -d "$(date -R -r filename) - 2 hours" filename

Если вы хотите изменить большое количество файлов, вы можете использовать следующее:

find DIRECTORY -print | while read filename; do
    # do whatever you want with the file
    touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done

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

find DIRECTORY -exec touch -d "2 hours ago" {} +

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

Что касается времени создания, большинство файловых систем Linux не отслеживают это значение. Есть ctimeсвязанный с файлами, но он отслеживает, когда метаданные файла были изменены в последний раз. Если файл никогда не менял свои разрешения, он может хранить время создания, но это совпадение. Явное изменение времени изменения файла считается изменением метаданных, поэтому также будет иметь побочный эффект обновления ctime.

решение2

Самый простой способ — доступ и изменение будут одинаковыми:

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

Видеть:прикосновение человека

решение3

Спасибо за помощь. Мне это помогло:

В терминале перейдите в каталог для date-edit. Затем введите:

find -print | while read filename; do
    # do whatever you want with the file
    touch -t 201203101513 "$filename"
done

После нажатия Enter вы увидите ">", за исключением последнего раза -> "готово".

Примечание: вы можете изменить «201203101513»

«201203101513» = дата, которую вы хотите установить для всех файлов в этом каталоге.

решение4

По крайней мере, у меня работает этот небольшой скрипт:

#!/bin/bash

# find specific files
files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in ${files}
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch
 touch -t $(date -v -1m -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
done

Связанный контент