Зміна дати створення файлу


62

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

Велике спасибі за вашу допомогу.


Пояснення "кодера", про яке писали інші люди, ймовірно, посилання на "дотик". Вам потрібно було б відкрити термінал, перейти до папки, в якій файл потім використовується командою touch, щоб змінити дату створення файлу.
Дерек Найт

2
FWIW Ви знаходитесь на правильних лініях з "touch-t", але між h та the - пробіл. Це "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
-m для зміни часу модифікації.
АлікЕльзін-кілака

5
У Yosemite, торкніться потрібного мені використання формату +%Y%m%d%H%M.%S(
помічайте

Я написав функцію , названу 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). Це не змінює право власності на файл, але отримує доступ до його inode і записує це як час останньої зміни статусу. На жаль, не вдається чітко вказати час тут, крім зміни часу комп'ютера ...

Підсумовуючи це, щоб мати можливість самостійно змінювати чотири часові позначки, ви можете використовувати (у цьому порядку для останніх 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 . Ви можете знайти це у своїй папці "Утиліти" або скористайтеся пошуком 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. Відкрийте додаток Terminal ( /Applications/Utilities/Terminal.app) або якщо ви віддаєте перевагу використовувати iTerm.

  2. Введіть це у Термінал (не натискаючи клавішу введення / повернення), вставляючи дату у форматі YYYYMMDDhhmm:

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

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

    201212211111 у наведеному вище прикладі представляють "21 грудня 2012 р. 11:11


2
Але touchзмінює модифіковану дату, а не дату створення файлу.
Даниїл

1
Це може робити і те, і інше. Залежить від параметрів.
stuff

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

2
@Daniel Ви probablly отримали відповідь на своє питання, але для повноти користі touch робить зміна дати створення в залежності від аргументів. Якщо ви наводите дату модифікації, що передує даті створення файлу, дата створення автоматично зміниться на нове значення дати модифікації, оскільки файл не може бути змінений до його створення.
Говінд Рай

2
Я просто спробував це на Сьєррі і дотик точно не змінює creationдату. Мені вдалося змінити accessта modifiedдати на "дату в минулому", але вона не змінила дату створення. Перевірте довідкову сторінку на дотик, вона не згадує дату створення. Файлова система: розширена Mac OS (Поширена, зашифрована). Використання SetFile -d "$(GetFileInfo -m test.txt)" file.txtпрацювало чудово.
Джонатан Хрест

7

Великі натяки тут, зокрема останній (від Лаурі Ранта, відповів 21 серпня о 15:21). Perfekt!

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

  1. Отримати вибрані елементи Finder
  2. Запустіть скрипт Shell, "Передати введення: як аргументи"

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

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

Це працює як шарм.


0

Найпростіший спосіб, який я знайшов, - це створити нову папку, скопіювати всі підпапки папки з сірим кольором у нову папку, і вуаля, нова папка не затьмарена. Ви навіть можете це зробити в пошуку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.