Zmiana daty utworzenia pliku

62

Czy możesz dać mi znać, jak mogę zmienić datę utworzenia pliku w Lionie. Zdaję sobie sprawę, że istnieje polecenie touch-t, ale to nie działa w Lion. Kilka osób wspomniało o innym sposobie, ale myślę, że napisali rozwiązanie w języku „kodera” zamiast w języku laika - czy ktoś byłby w stanie odpowiedzieć na nie w sposób, który może wykonać laik?

Wielkie dzięki za Twoją pomoc.

użytkownik55502
źródło
Wyjaśnienie „kodera”, o którym pisali inni ludzie, prawdopodobnie odnosi się do „dotyku”. Musisz otworzyć terminal, przejść do folderu, w którym znajduje się plik, a następnie użyć polecenia dotykowego, aby zmodyfikować datę utworzenia pliku.
Derek Knight,
2
FWIW Znajdujesz się na właściwej linii za pomocą „touch-t”, ale pomiędzy h i - jest spacja. To „touch-t”
Derek Knight

Odpowiedzi:

95

touch -tzwykle zmienia tylko modyfikacje i czasy dostępu. Zmienia czas tworzenia tylko wtedy, gdy czas docelowy jest wcześniejszy niż pierwotny czas utworzenia.

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 zawsze zmienia czas tworzenia.

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

SetFile jest częścią pakietu narzędzi wiersza poleceń, który można pobrać ze strony developer.apple.com/downloads lub z preferencji Xcode.

Lri
źródło
4
-m do zmiany czasu modyfikacji.
AlikElzin-kilaka
5
W Yosemite touch wymaga ode mnie użycia formatu +%Y%m%d%H%M.%S(zauważ kropkę między minutami a sekundami)
Calimo,
Napisałem funkcję wywoływaną CpCreationDatew fish:SetFile -d (GetFileInfo -m $argv[1]) $argv[2]
Pascal
15

W systemie Mac OS X wydaje się, że z plikiem związane są cztery różne znaczniki czasu. Te znaczniki czasu nie zawsze są aktualizowane niezależnie od siebie, ale można mieć pewną kontrolę indywidualną z odrobiną starannością i przy użyciu touch, SetFilei chown(lub chmod). Aby to zobaczyć, eksperymentujmy i utwórz nowy plik z wiersza poleceń #:

# 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

Pierwsza wymieniona data to godzina ostatniego dostępu ( atime), druga to godzina ostatniej modyfikacji ( mtime), trzecia to ostatnia zmiana statusu ( ctime), czwarta to data utworzenia pliku (urodzenia Btime), patrz man lstat.

Aby zmodyfikować czas dostępu ( atime) do określonego czasu, użyj:

# 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

Aby zmodyfikować czas modyfikacji ( mtime) i czas utworzenia pliku ( Btime) do określonego czasu:

# 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

Najwyraźniej automatycznie aktualizuje również czas ostatniej zmiany statusu ( ctime) do aktualnego czasu systemowego!

Aby zmodyfikować tylko czas utworzenia / urodzenia ( Btime) do określonego czasu, użyj (zgodnie z propozycją innych powyżej):

# 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

Aby zmodyfikować tylko czas ostatniej zmiany statusu ( ctime) do bieżącego czasu systemowego, użyj na przykład:

# 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

gdzie usernamejest właścicielem pliku (według zgłoszenia statlub ls -l). Nie zmienia to własności pliku, ale uzyskuje dostęp do i-węzła pliku i zapisuje to jako czas ostatniej zmiany statusu. Niestety nie jest możliwe jednoznaczne określenie tutaj czasu inaczej niż poprzez zmianę czasu komputera ...

Podsumowując, aby móc niezależnie zmieniać cztery znaczniki czasu, można użyć (w tej kolejności dla ostatnich 3):

  1. touch -a -tCCYYMMDDHH.SS <file>
  2. touch -m -tCCYYMMDDHH.SS <file>
  3. SetFile -d "MM/DD/CCYY HH:MM:SS" <file>
  4. [ustaw datę systemową] chown username <file>[przywróć normalną datę systemową]

(Oczywiście, resetowanie daty systemowej może nie być operacją wolną od ryzyka, ostrzegłeś).

armando.sano
źródło
+1 Dziękujemy za tę bardzo szczegółową odpowiedź. To rozwiązało wszystkie moje nieszczęścia.
Govind Rai
13

Polecenie wiersza touchpolecenia działa w programie Lion, ale potrzebujesz trochę tła, jak go używać.

Po pierwsze, musisz go wpisać, nie jest to narzędzie działające graficznie w oknie. Miejsce, w którym je wpisujesz, to aplikacja o nazwie Terminal . Możesz to znaleźć w folderze Narzędzia lub skorzystać z wyszukiwania Spotlight, aby go znaleźć.

Po uruchomieniu pojawi się okno wiersza poleceń, w którym możesz wpisywać polecenia. To, że piszesz, nie oznacza, że ​​ma to coś wspólnego z kodowaniem, ale dla kogoś, kto jest nowicjuszem w „staromodnych” komendach systemu operacyjnego, może to wyglądać nieco zastraszająco.

Tak więc polecenie nazywa się dotykiem , a po poleceniu można przekazać różne parametry, jedynym wymaganym jest nazwa pliku. Wpisanie następującego spowoduje ustawienie daty ostatniej modyfikacji pliku na bieżącą godzinę:

touch filename

Oczywiście może być konieczne najpierw znalezienie pliku, co może wymagać dalszych poleceń, aby się do niego dostać. cd lub Zmień katalog komenda pomaga tutaj:

cd ~/Desktop/files/PDFs
touch filename

Lub możesz po prostu dodać pełną ścieżkę do pliku jako część polecenia:

touch ~/Desktop/files/PDFs/filename

Bardziej zaawansowane użycie polecenia dotykowego pozwala określić czas, który chcesz ustawić, zamiast korzystać z czasu wykonania, ustawić dostęp zamiast czasów modyfikacji itp. To właśnie robią parametry takie jak -t i inni. Niektórzy ustawiają czas na czas innego pliku, niektórzy ustawiają cofanie lub przewijanie w czasie o X, ( patrz tutaj po więcej szczegółów), np .:

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

Poniżej znajduje się ta strona, która jest również przydatnym odniesieniem i doskonałym przykładem z kilkoma wskazówkami dla tych, którzy nie czują się komfortowo z lokalizacjami plików w wierszu poleceń

Pamiętaj, że spowoduje to zmianę atrybutów daty modyfikacji i daty utworzenia tylko, jeśli plik został utworzony po wprowadzonej dacie. Wynika to z faktu, że pliku nie można zmodyfikować przed jego utworzeniem. Jeśli utworzono przed ustawioną datą, tylko zmodyfikowana data zostanie zmieniona.

Jak zmienić atrybut daty utworzenia pliku?

  1. Otwórz aplikację Terminal ( /Applications/Utilities/Terminal.app) lub jeśli wolisz korzystać z iTerm.

  2. Wpisz to w Terminal (bez wciskania enter / return) wstawiając datę w formacie YYYYMMDDhhmm:

    touch -t 201212211111
    
  3. Otwórz okno Findera i zlokalizuj plik, który chcesz zmodyfikować, przeciągnij go i upuść w oknie Terminal, a następnie wstawi lokalizację pliku, używając terminologii wiersza poleceń. Oto przykład tego, co należy wpisać w terminalu w tym miejscu:

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

    201212211111 w powyższym przykładzie reprezentują „21 grudnia 2012 11:11

farsz
źródło
2
Ale touchmodyfikuje datę modyfikacji, a nie datę utworzenia pliku.
Daniel
1
Może to zrobić jedno i drugie. Zależy od parametrów.
farsz
2
Używanie touchparametrów podanych powyżej zmieniło modyfikację, ale nie daty utworzenia mojego pliku testowego.
Daniel
2
@Daniel Ty probablly dostał odpowiedź, ale dla kompletności sake touch robi zmodyfikować datę utworzenia w zależności od argumentów. Jeśli podasz datę modyfikacji wcześniejszą niż data utworzenia pliku, data utworzenia automatycznie zmieni się na nową wartość daty modyfikacji, ponieważ pliku nie można zmodyfikować przed jego utworzeniem.
Govind Rai,
2
Właśnie próbowałem tego na Sierra i dotyk zdecydowanie nie zmienia creationdaty. Udało mi się zmienić accessi modifiedpochodzi z „datą w przeszłości”, ale nie modyfikować datę utworzenia. Sprawdź stronę podręcznika dotykowego, nie wspomina o dacie utworzenia. System plików: Mac OS Extended (Journaled, Encrypted). Korzystanie SetFile -d "$(GetFileInfo -m test.txt)" file.txtdziałało idealnie.
Jonathan Cross
7

Wielkie wskazówki tutaj, w szczególności ostatnia (od Lauri Ranta, odpowiedział 21 sierpnia o 15:21). Perfekt!

Teraz używam prostego przepływu pracy Automatora, aby grupowo zmieniać wiele plików:

  1. Zdobądź wybrane przedmioty Findera
  2. Uruchom skrypt powłoki, „Przekaż dane wejściowe: jako argumenty”

Skrypt powłoki to:

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

To działa jak urok.

Claudio Wilmanns
źródło
0

Najprostszym sposobem, jaki znalazłem, było utworzenie nowego folderu, skopiowanie wszystkich podfolderów wyszarzonego folderu do nowego folderu i voila, nowy folder nie jest wyszarzony. Możesz to zrobić nawet w wyszukiwarce.

Co by było fajne
źródło