Изменение даты создания файла


62

Не могли бы вы сообщить мне, как я могу изменить дату создания файла в Lion. Я понимаю, что есть команда touch-t, но она не работает в Lion. Несколько человек упомянули другой способ, но я думаю, что они написали решение на языке «кодера», а не на языке неспециалистов - сможет ли кто-нибудь ответить на него так, как может выполнить неспециалист?

Большое спасибо за вашу помощь.


Объяснение «кодера», о котором писали другие люди, - это, вероятно, ссылка на «прикосновение». Вам нужно будет открыть Терминал, перейти в папку, в которой находится файл, затем использовать сенсорную команду, чтобы изменить дату создания файла.
Дерек Найт

2
FWIW Вы находитесь на правильных линиях с «touch-t», но между h и - есть пробел. Это "touch -t"
Дерек Найт

Ответы:


95

touch -tобычно только изменяет время модификации и доступа. Это только изменяет время создания, если целевое время предшествует исходному времени создания.

touch -t 199912312359 file.txt
touch -t $(date -jf %FT%T 1999-12-31T23:59:59 +%Y%m%d%H%M%S) file.txt

SetFile -d всегда меняет время создания.

SetFile -d '12/31/1999 23:59:59' file.txt
SetFile -d "$(GetFileInfo -m test.txt)" file.txt

SetFile является частью пакета инструментов командной строки, который можно загрузить с developer.apple.com/downloads или из предпочтений Xcode.


4
м для изменения времени модификации.
Алик Эльзин-килака

5
В Йосемити касание требовало, чтобы я использовал формат +%Y%m%d%H%M.%S(обратите внимание на точку между минутами и секундами)
Calimo

Я написал функцию , названную CpCreationDateв fish:SetFile -d (GetFileInfo -m $argv[1]) $argv[2]
Pascal

15

В Mac OS X существует четыре разных отметки времени, связанные с файлом. Эти метки времени не всегда обновляются независимо друг от друга, но один может иметь некоторый индивидуальный контроль с небольшим количеством ухода и с использованием touch, SetFileи chown(или chmod). Чтобы увидеть это, давайте поэкспериментируем и создадим новый файл из командной строки #:

# touch a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

Первая указанная дата - это время последнего доступа ( atime), вторая - время последнего изменения ( mtime), третья - последнее изменение статуса ( ctime), четвертая - время создания файла (рождение, Btime), см man lstat.

Чтобы изменить время доступа ( atime) к указанному времени, используйте:

# touch -a -t201412312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "May 19 00:11:14 2015" "May 19 00:11:46 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

Чтобы изменить время модификации ( mtime) и время создания файла ( Btime) на указанное время, используйте:

# touch -m -t201312312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 2013" 4096 0 0 a.txt

Очевидно, это также автоматически обновляет время последнего изменения статуса ( ctime) до текущего системного времени!

Чтобы изменить только время создания / рождения ( Btime) к данному времени, используйте (как предложено другими выше):

# SetFile -d "12/31/1999 23:59:59" a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

Чтобы изменить только время последнего изменения статуса ( ctime) на текущее системное время, используйте, например:

# chown username a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:13:45 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

где usernameнаходится владелец файла (как сообщает statили ls -l). Это не меняет владельца файла, но обращается к его индексу и записывает его как время последнего изменения статуса. К сожалению, здесь невозможно указать время явно, кроме как путем изменения времени компьютера ...

Таким образом, чтобы иметь возможность независимо изменять четыре временные метки, можно использовать (в этом порядке для последних 3):

  1. touch -a -tCCYYMMDDHH.SS <file>
  2. touch -m -tCCYYMMDDHH.SS <file>
  3. SetFile -d "MM/DD/CCYY HH:MM:SS" <file>
  4. [установить системную дату] chown username <file>[вернуться к нормальной системной дате]

(Конечно, сброс системной даты не может быть безрисковой операцией, вы были предупреждены.)


+1 Спасибо за этот супер подробный ответ. Это решило все мои беды.
Говинд Рай

13

Команда командной строки touchработает в Lion, но вам нужно немного знать, как ее использовать.

Во-первых, вам нужно ввести его, это не утилита, которая работает графически в окне. Место, где вы вводите это приложение под названием Terminal . Вы можете найти это в своей папке Utilities или использовать поиск Spotlight, чтобы найти его.

Как только вы запустите его, вы получите окно командной строки, где вы можете вводить команды. То, что вы печатаете, не означает, что это имеет какое-то отношение к кодированию, но для кого-то новичка в «старомодных» командах ОС это может выглядеть немного пугающим.

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

touch filename

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

cd ~/Desktop/files/PDFs
touch filename

Или вы можете просто добавить полный путь к файлу как часть команды:

touch ~/Desktop/files/PDFs/filename

Более расширенное использование сенсорной команды позволяет вам указать время, которое вы хотите установить, а не использовать время при выполнении, установить доступ вместо времени модификации и т. Д. Это то, что делают такие параметры, как -t и другие. Некоторые устанавливают время, чтобы быть временем другого файла, некоторые устанавливают его для возврата назад или вперед во времени на величину X ( см. Здесь для более подробной информации), например:

touch -d '1 May 2005 10:22' file8

Ниже приводится ссылка на эту страницу, которая также является полезным справочным материалом и отличным примером с некоторыми советами для тех, кому не нравится расположение файлов в командной строке.

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

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

  1. Откройте приложение «Терминал» ( /Applications/Utilities/Terminal.app) или, если хотите, воспользуйтесь iTerm.

  2. Введите это в Терминал (не нажимая ввод / возврат), вставив дату в формате YYYYMMDDhhmm:

    touch -t 201212211111
    
  3. Откройте окно Finder и найдите файл, который вы хотите изменить, и перетащите его в окно терминала, после чего он вставит местоположение файла, используя терминологию командной строки. Вот пример того, что должно быть введено в Терминал на этом этапе:

    touch -t 201212211111 /Volumes/Mac\ HD/Pictures/somefile.jpg
    

    201212211111 в приведенном выше примере представляют «21 декабря 2012 11:11 утра


2
Но touchизменяет дату изменения, а не дату создания файла.
Даниил

1
Это может сделать оба. Зависит от параметров.
Stuff

2
Использование touchс параметрами, которые вы указали выше, изменило модификацию, но не даты создания моего тестового файла.
Даниил

2
@Daniel Вы, вероятно, получили свой ответ, но для полноты картины touch действительно изменяет дату создания в зависимости от аргументов. Если указать дату модификации, предшествующую дате создания файла, дата создания автоматически изменится на новое значение даты изменения, поскольку файл нельзя изменить до его создания.
Говинд Рай

2
Я только что попробовал это на Сьерре и тач точно не меняет creationдату. Я был в состоянии изменить accessи modifiedдаты на «дату в прошлом», но это не изменило дату создания. Проверьте справочную страницу на предмет прикосновения, там не упоминается дата создания. Файловая система: Mac OS Extended (Журнальный, Зашифрованный). Использование SetFile -d "$(GetFileInfo -m test.txt)" file.txtсработало отлично.
Джонатан Кросс

7

Здесь намеки Грэйсса, в частности последний (от Лаури Ранта, ответили 21 августа в 15:21). Perfekt!

Теперь я использую простой рабочий процесс Automator для пакетного изменения нескольких файлов:

  1. Получить выбранные элементы Finder
  2. Запустите Shell Script, «Передать ввод: как аргументы»

Сценарий оболочки:

for f in "$@"
do
    SetFile -d "$(GetFileInfo -m "$f")" "$f" 
done

Это работает как шарм.


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.